From 8fdf7bfb04ae9dd8f5732b851695ab00adc9b83b Mon Sep 17 00:00:00 2001 From: Martchus Date: Sat, 5 Mar 2022 12:34:26 +0100 Subject: [PATCH] Print certain resource limits on server startup --- librepomgr/serversetup.cpp | 36 ++++++++++++++++++++++++++++++++++++ librepomgr/serversetup.h | 1 + 2 files changed, 37 insertions(+) diff --git a/librepomgr/serversetup.cpp b/librepomgr/serversetup.cpp index 8004d6f..8c88c46 100644 --- a/librepomgr/serversetup.cpp +++ b/librepomgr/serversetup.cpp @@ -30,6 +30,7 @@ #ifdef PLATFORM_LINUX #include +#include #endif #include @@ -568,6 +569,40 @@ void ServiceSetup::loadConfigFiles(bool doFirstTimeSetup) cerr << Phrases::SubMessage << "Ccache directory: " << building.ccacheDir << Phrases::End; } +#ifdef PLATFORM_LINUX +static void printLimitValue(auto value, bool size) +{ + if (value == RLIM_INFINITY) { + cerr << "infinity"; + } else if (size) { + cerr << dataSizeToString(value); + } else { + cerr << value; + } +} + +static void printLimit(auto field, std::string_view fieldName, bool size = false) +{ + auto limit = rlimit(); + getrlimit(field, &limit); + cerr << Phrases::SubMessage << fieldName << ": "; + printLimitValue(limit.rlim_cur, size); + cerr << " / "; + printLimitValue(limit.rlim_max, size); + cerr << Phrases::End; +} +#endif + +void ServiceSetup::printLimits() +{ +#ifdef PLATFORM_LINUX + cerr << Phrases::InfoMessage << "Limits (soft / hard):" << Phrases::End; + printLimit(RLIMIT_NOFILE, "NOFILE (Number of open files)"); + printLimit(RLIMIT_MEMLOCK, "MEMLOCK (Locked-in-memory address space)", true); + printLimit(RLIMIT_LOCKS, "LOCKS (Maximum number of file locks)"); +#endif +} + void ServiceSetup::printDatabases() { cerr << Phrases::SuccessMessage << "Found " << config.databases.size() << " databases:" << Phrases::End; @@ -659,6 +694,7 @@ int ServiceSetup::run() #ifndef CPP_UTILITIES_DEBUG_BUILD try { #endif + printLimits(); loadConfigFiles(true); config.discardDatabases(); config.loadAllPackages(building.loadFilesDbs, building.forceLoadingDbs); diff --git a/librepomgr/serversetup.h b/librepomgr/serversetup.h index d783c68..c720e19 100644 --- a/librepomgr/serversetup.h +++ b/librepomgr/serversetup.h @@ -48,6 +48,7 @@ struct LIBREPOMGR_EXPORT ServiceSetup : public LibPkg::Lockable { std::size_t packageCacheLimit = 1000; void loadConfigFiles(bool doFirstTimeSetup); + void printLimits(); void printDatabases(); std::string_view cacheFilePath() const; void restoreState();