summaryrefslogtreecommitdiff
path: root/src/mongo/db/startup_warnings_mongod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/startup_warnings_mongod.cpp')
-rw-r--r--src/mongo/db/startup_warnings_mongod.cpp227
1 files changed, 152 insertions, 75 deletions
diff --git a/src/mongo/db/startup_warnings_mongod.cpp b/src/mongo/db/startup_warnings_mongod.cpp
index 29a452f687e..b7b8e5fc067 100644
--- a/src/mongo/db/startup_warnings_mongod.cpp
+++ b/src/mongo/db/startup_warnings_mongod.cpp
@@ -43,6 +43,7 @@
#include "mongo/db/server_options.h"
#include "mongo/db/startup_warnings_common.h"
#include "mongo/db/storage/storage_options.h"
+#include "mongo/logv2/log.h"
#include "mongo/util/log.h"
#include "mongo/util/processinfo.h"
#include "mongo/util/str.h"
@@ -141,32 +142,46 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
bool warned = false;
if (sizeof(int*) == 4) {
- log() << startupWarningsLog;
- log() << "** NOTE: This is a 32 bit MongoDB binary." << startupWarningsLog;
- log() << "** 32 bit builds are limited to less than 2GB of data "
- << "(or less with --journal)." << startupWarningsLog;
+ LOGV2_OPTIONS(22151, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(
+ 22152, {logv2::LogTag::kStartupWarnings}, "** NOTE: This is a 32 bit MongoDB binary.");
+ LOGV2_OPTIONS(22153,
+ {logv2::LogTag::kStartupWarnings},
+ "** 32 bit builds are limited to less than 2GB of data (or less with "
+ "--journal).");
if (!storageParams.dur) {
- log() << "** Note that journaling defaults to off for 32 bit "
- << "and is currently off." << startupWarningsLog;
+ LOGV2_OPTIONS(
+ 22154,
+ {logv2::LogTag::kStartupWarnings},
+ "** Note that journaling defaults to off for 32 bit and is currently off.");
}
- log() << "** See http://dochub.mongodb.org/core/32bit" << startupWarningsLog;
+ LOGV2_OPTIONS(22155,
+ {logv2::LogTag::kStartupWarnings},
+ "** See http://dochub.mongodb.org/core/32bit");
warned = true;
}
if (!ProcessInfo::blockCheckSupported()) {
- log() << startupWarningsLog;
- log() << "** NOTE: your operating system version does not support the method that "
- << "MongoDB" << startupWarningsLog;
- log() << "** uses to detect impending page faults." << startupWarningsLog;
- log() << "** This may result in slower performance for certain use "
- << "cases" << startupWarningsLog;
+ LOGV2_OPTIONS(22156, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(
+ 22157,
+ {logv2::LogTag::kStartupWarnings},
+ "** NOTE: your operating system version does not support the method that MongoDB");
+ LOGV2_OPTIONS(22158,
+ {logv2::LogTag::kStartupWarnings},
+ "** uses to detect impending page faults.");
+ LOGV2_OPTIONS(22159,
+ {logv2::LogTag::kStartupWarnings},
+ "** This may result in slower performance for certain use cases");
warned = true;
}
#ifdef __linux__
if (boost::filesystem::exists("/proc/vz") && !boost::filesystem::exists("/proc/bc")) {
- log() << startupWarningsLog;
- log() << "** WARNING: You are running in OpenVZ which can cause issues on versions "
- << "of RHEL older than RHEL6." << startupWarningsLog;
+ LOGV2_OPTIONS(22160, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22161,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: You are running in OpenVZ which can cause issues on versions of "
+ "RHEL older than RHEL6.");
warned = true;
}
@@ -174,10 +189,13 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
try {
hasMultipleNumaNodes = boost::filesystem::exists("/sys/devices/system/node/node1");
} catch (boost::filesystem::filesystem_error& e) {
- log() << startupWarningsLog;
- log() << "** WARNING: Cannot detect if NUMA interleaving is enabled. "
- << "Failed to probe \"" << e.path1().string() << "\": " << e.code().message()
- << startupWarningsLog;
+ LOGV2_OPTIONS(22162, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22163,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: Cannot detect if NUMA interleaving is enabled. Failed to probe "
+ "\"{e_path1_string}\": {e_code_message}",
+ "e_path1_string"_attr = e.path1().string(),
+ "e_code_message"_attr = e.code().message());
}
if (hasMultipleNumaNodes) {
// We are on a box with a NUMA enabled kernel and more than 1 numa node (they start at
@@ -197,27 +215,38 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
std::string line; // we only need the first line
std::getline(f, line);
if (f.fail()) {
- warning() << "failed to read from /proc/self/numa_maps: " << errnoWithDescription()
- << startupWarningsLog;
+ LOGV2_WARNING_OPTIONS(
+ 22200,
+ {logv2::LogTag::kStartupWarnings},
+ "failed to read from /proc/self/numa_maps: {errnoWithDescription}",
+ "errnoWithDescription"_attr = errnoWithDescription());
warned = true;
} else {
// skip over pointer
std::string::size_type where = line.find(' ');
if ((where == std::string::npos) || (++where == line.size())) {
- log() << startupWarningsLog;
- log() << "** WARNING: cannot parse numa_maps line: '" << line << "'"
- << startupWarningsLog;
+ LOGV2_OPTIONS(22164, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22165,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: cannot parse numa_maps line: '{line}'",
+ "line"_attr = line);
warned = true;
}
// if the text following the space doesn't begin with 'interleave', then
// issue the warning.
else if (line.find("interleave", where) != where) {
- log() << startupWarningsLog;
- log() << "** WARNING: You are running on a NUMA machine." << startupWarningsLog;
- log() << "** We suggest launching mongod like this to avoid "
- << "performance problems:" << startupWarningsLog;
- log() << "** numactl --interleave=all mongod [other options]"
- << startupWarningsLog;
+ LOGV2_OPTIONS(22166, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22167,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: You are running on a NUMA machine.");
+ LOGV2_OPTIONS(22168,
+ {logv2::LogTag::kStartupWarnings},
+ "** We suggest launching mongod like this to avoid "
+ "performance problems:");
+ LOGV2_OPTIONS(
+ 22169,
+ {logv2::LogTag::kStartupWarnings},
+ "** numactl --interleave=all mongod [other options]");
warned = true;
}
}
@@ -230,10 +259,14 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
f >> val;
if (val == 2) {
- log() << startupWarningsLog;
- log() << "** WARNING: /proc/sys/vm/overcommit_memory is " << val << startupWarningsLog;
- log() << "** Journaling works best with it set to 0 or 1"
- << startupWarningsLog;
+ LOGV2_OPTIONS(22170, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22171,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: /proc/sys/vm/overcommit_memory is {val}",
+ "val"_attr = val);
+ LOGV2_OPTIONS(22172,
+ {logv2::LogTag::kStartupWarnings},
+ "** Journaling works best with it set to 0 or 1");
}
}
@@ -243,11 +276,16 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
f >> val;
if (val != 0) {
- log() << startupWarningsLog;
- log() << "** WARNING: /proc/sys/vm/zone_reclaim_mode is " << val << startupWarningsLog;
- log() << "** We suggest setting it to 0" << startupWarningsLog;
- log() << "** http://www.kernel.org/doc/Documentation/sysctl/vm.txt"
- << startupWarningsLog;
+ LOGV2_OPTIONS(22173, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22174,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: /proc/sys/vm/zone_reclaim_mode is {val}",
+ "val"_attr = val);
+ LOGV2_OPTIONS(
+ 22175, {logv2::LogTag::kStartupWarnings}, "** We suggest setting it to 0");
+ LOGV2_OPTIONS(22176,
+ {logv2::LogTag::kStartupWarnings},
+ "** http://www.kernel.org/doc/Documentation/sysctl/vm.txt");
}
}
@@ -260,16 +298,24 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
// If we do not have hugepages enabled, we don't need to warn about its features
shouldWarnAboutDefragAlways = true;
- log() << startupWarningsLog;
- log() << "** WARNING: " << kTransparentHugePagesDirectory << "/enabled is 'always'."
- << startupWarningsLog;
- log() << "** We suggest setting it to 'never'" << startupWarningsLog;
+ LOGV2_OPTIONS(22177, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22178,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: {kTransparentHugePagesDirectory}/enabled is 'always'.",
+ "kTransparentHugePagesDirectory"_attr = kTransparentHugePagesDirectory);
+ LOGV2_OPTIONS(22179,
+ {logv2::LogTag::kStartupWarnings},
+ "** We suggest setting it to 'never'");
warned = true;
}
} else if (transparentHugePagesEnabledResult.getStatus().code() !=
ErrorCodes::NonExistentPath) {
- warning() << startupWarningsLog;
- warning() << transparentHugePagesEnabledResult.getStatus().reason() << startupWarningsLog;
+ LOGV2_WARNING_OPTIONS(22201, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_WARNING_OPTIONS(22202,
+ {logv2::LogTag::kStartupWarnings},
+ "{transparentHugePagesEnabledResult_getStatus_reason}",
+ "transparentHugePagesEnabledResult_getStatus_reason"_attr =
+ transparentHugePagesEnabledResult.getStatus().reason());
warned = true;
}
@@ -278,15 +324,23 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
if (transparentHugePagesDefragResult.isOK()) {
if (shouldWarnAboutDefragAlways &&
transparentHugePagesDefragResult.getValue() == "always") {
- log() << startupWarningsLog;
- log() << "** WARNING: " << kTransparentHugePagesDirectory << "/defrag is 'always'."
- << startupWarningsLog;
- log() << "** We suggest setting it to 'never'" << startupWarningsLog;
+ LOGV2_OPTIONS(22180, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22181,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: {kTransparentHugePagesDirectory}/defrag is 'always'.",
+ "kTransparentHugePagesDirectory"_attr = kTransparentHugePagesDirectory);
+ LOGV2_OPTIONS(22182,
+ {logv2::LogTag::kStartupWarnings},
+ "** We suggest setting it to 'never'");
warned = true;
}
} else if (transparentHugePagesDefragResult.getStatus().code() != ErrorCodes::NonExistentPath) {
- warning() << startupWarningsLog;
- warning() << transparentHugePagesDefragResult.getStatus().reason() << startupWarningsLog;
+ LOGV2_WARNING_OPTIONS(22203, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_WARNING_OPTIONS(22204,
+ {logv2::LogTag::kStartupWarnings},
+ "{transparentHugePagesDefragResult_getStatus_reason}",
+ "transparentHugePagesDefragResult_getStatus_reason"_attr =
+ transparentHugePagesDefragResult.getStatus().reason());
warned = true;
}
#endif // __linux__
@@ -298,14 +352,21 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
if (!getrlimit(RLIMIT_NOFILE, &rlnofile)) {
if (rlnofile.rlim_cur < minNumFiles) {
- log() << startupWarningsLog;
- log() << "** WARNING: soft rlimits too low. Number of files is " << rlnofile.rlim_cur
- << ", should be at least " << minNumFiles << startupWarningsLog;
+ LOGV2_OPTIONS(22183, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22184,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: soft rlimits too low. Number of files is "
+ "{rlnofile_rlim_cur}, should be at least {minNumFiles}",
+ "rlnofile_rlim_cur"_attr = rlnofile.rlim_cur,
+ "minNumFiles"_attr = minNumFiles);
}
} else {
const auto errmsg = errnoWithDescription();
- log() << startupWarningsLog;
- log() << "** WARNING: getrlimit failed. " << errmsg << startupWarningsLog;
+ LOGV2_OPTIONS(22185, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22186,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: getrlimit failed. {errmsg}",
+ "errmsg"_attr = errmsg);
}
// Solaris does not have RLIMIT_MEMLOCK, these are exposed via getrctl(2) instead
@@ -317,15 +378,23 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
if (!getrlimit(RLIMIT_MEMLOCK, &rlmemlock)) {
if ((rlmemlock.rlim_cur / ProcessInfo::getPageSize()) < minLockedPages) {
- log() << startupWarningsLog;
- log() << "** WARNING: soft rlimits too low. The locked memory size is "
- << rlmemlock.rlim_cur << " bytes, it should be at least "
- << minLockedPages * ProcessInfo::getPageSize() << " bytes" << startupWarningsLog;
+ LOGV2_OPTIONS(22187, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(
+ 22188,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: soft rlimits too low. The locked memory size is {rlmemlock_rlim_cur} "
+ "bytes, it should be at least {minLockedPages_ProcessInfo_getPageSize} bytes",
+ "rlmemlock_rlim_cur"_attr = rlmemlock.rlim_cur,
+ "minLockedPages_ProcessInfo_getPageSize"_attr =
+ minLockedPages * ProcessInfo::getPageSize());
}
} else {
const auto errmsg = errnoWithDescription();
- log() << startupWarningsLog;
- log() << "** WARNING: getrlimit failed. " << errmsg << startupWarningsLog;
+ LOGV2_OPTIONS(22189, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22190,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: getrlimit failed. {errmsg}",
+ "errmsg"_attr = errmsg);
}
#endif
#endif
@@ -334,28 +403,36 @@ void logMongodStartupWarnings(const StorageGlobalParams& storageParams,
ProcessInfo p;
if (p.hasNumaEnabled()) {
- log() << startupWarningsLog;
- log() << "** WARNING: You are running on a NUMA machine." << startupWarningsLog;
- log() << "** We suggest disabling NUMA in the machine BIOS " << startupWarningsLog;
- log() << "** by enabling interleaving to avoid performance problems. "
- << startupWarningsLog;
- log() << "** See your BIOS documentation for more information."
- << startupWarningsLog;
+ LOGV2_OPTIONS(22191, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22192,
+ {logv2::LogTag::kStartupWarnings},
+ "** WARNING: You are running on a NUMA machine.");
+ LOGV2_OPTIONS(22193,
+ {logv2::LogTag::kStartupWarnings},
+ "** We suggest disabling NUMA in the machine BIOS ");
+ LOGV2_OPTIONS(22194,
+ {logv2::LogTag::kStartupWarnings},
+ "** by enabling interleaving to avoid performance problems. ");
+ LOGV2_OPTIONS(22195,
+ {logv2::LogTag::kStartupWarnings},
+ "** See your BIOS documentation for more information.");
warned = true;
}
#endif // #ifdef _WIN32
if (storageParams.engine == "ephemeralForTest") {
- log() << startupWarningsLog;
- log() << "** NOTE: The ephemeralForTest storage engine is for testing only. "
- << startupWarningsLog;
- log() << "** Do not use in production." << startupWarningsLog;
+ LOGV2_OPTIONS(22196, {logv2::LogTag::kStartupWarnings}, "");
+ LOGV2_OPTIONS(22197,
+ {logv2::LogTag::kStartupWarnings},
+ "** NOTE: The ephemeralForTest storage engine is for testing only. ");
+ LOGV2_OPTIONS(
+ 22198, {logv2::LogTag::kStartupWarnings}, "** Do not use in production.");
warned = true;
}
if (warned) {
- log() << startupWarningsLog;
+ LOGV2_OPTIONS(22199, {logv2::LogTag::kStartupWarnings}, "");
}
}
} // namespace mongo