diff options
Diffstat (limited to 'src/mongo/db/startup_warnings_mongod.cpp')
-rw-r--r-- | src/mongo/db/startup_warnings_mongod.cpp | 227 |
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 |