diff options
author | kungasc <kungasc@yandex-team.com> | 2023-07-31 15:41:52 +0300 |
---|---|---|
committer | kungasc <kungasc@yandex-team.com> | 2023-07-31 15:41:52 +0300 |
commit | cdb1447faeea735496e3b3d275f6468d2e7ab574 (patch) | |
tree | 09f63708248cf45e72736b44fed91cb5675e2357 | |
parent | bc1247e1dfdca1b751a312dbc4d735e8ded26435 (diff) | |
download | ydb-cdb1447faeea735496e3b3d275f6468d2e7ab574.tar.gz |
KIKIMR-18537 Check TProcStat.Fill return
-rw-r--r-- | ydb/core/mon_alloc/monitor.cpp | 42 | ||||
-rw-r--r-- | ydb/core/mon_alloc/stats.cpp | 6 | ||||
-rw-r--r-- | ydb/core/mon_alloc/stats.h | 2 |
3 files changed, 29 insertions, 21 deletions
diff --git a/ydb/core/mon_alloc/monitor.cpp b/ydb/core/mon_alloc/monitor.cpp index 7554f671aa..382dfb5b77 100644 --- a/ydb/core/mon_alloc/monitor.cpp +++ b/ydb/core/mon_alloc/monitor.cpp @@ -496,7 +496,7 @@ namespace NKikimr { void LogMemoryStatsIfNeeded(const TActorContext& ctx, TMemoryUsage memoryUsage) noexcept { auto usage = memoryUsage.Usage(); LOG_DEBUG_S(ctx, NKikimrServices::MEMORY_PROFILER, memoryUsage.ToString()); - if (IsDangerous && usage < TDumpLogConfig::RssUsageSoft) { + if (IsDangerous && usage < TDumpLogConfig::RssUsageSoft) { IsDangerous = false; } else if (!IsDangerous && usage > TDumpLogConfig::RssUsageHard) { if (TInstant::Now() - LogMemoryStatsTime > TDumpLogConfig::DumpInterval) { @@ -509,21 +509,24 @@ namespace NKikimr { void HandleWakeup(const TActorContext& ctx) noexcept { AllocMonitor->Update(Interval); - auto memoryUsage = TAllocState::GetMemoryUsage(); - LogMemoryStatsIfNeeded(ctx, memoryUsage); - - TMemObserver::TMemStat stat{ - memoryUsage.AnonRss, - memoryUsage.CGroupLimit, - static_cast<ui64>(memoryUsage.CGroupLimit * TDumpLogConfig::RssUsageSoftLimit)}; - - if (memoryUsage.AnonRss > TDumpLogConfig::RssUsageNotifySlowLimit || - TInstant::Now() - NotifyMemoryStatsTime > TDumpLogConfig::NotifySlowInterval) { - NotifyMemoryStatsTime = TInstant::Now(); - MemObserver->NotifyStat(stat); - } else { - // fast path: don't call callback, but update current stat - MemObserver->SetStat(stat); + + std::optional<TMemoryUsage> memoryUsage = TAllocState::TryGetMemoryUsage(); + if (memoryUsage) { + LogMemoryStatsIfNeeded(ctx, memoryUsage.value()); + + TMemObserver::TMemStat stat{ + memoryUsage->AnonRss, + memoryUsage->CGroupLimit, + static_cast<ui64>(memoryUsage->CGroupLimit * TDumpLogConfig::RssUsageSoftLimit)}; + + if (memoryUsage->AnonRss > TDumpLogConfig::RssUsageNotifySlowLimit || + TInstant::Now() - NotifyMemoryStatsTime > TDumpLogConfig::NotifySlowInterval) { + NotifyMemoryStatsTime = TInstant::Now(); + MemObserver->NotifyStat(stat); + } else { + // fast path: don't call callback, but update current stat + MemObserver->SetStat(stat); + } } ctx.Schedule(Interval, new TEvents::TEvWakeup()); @@ -531,8 +534,11 @@ namespace NKikimr { void HandleDump(TEvDumpLogStats::TPtr&, const TActorContext& ctx) noexcept { if (IsDangerous) { - LOG_WARN_S(ctx, NKikimrServices::MEMORY_PROFILER, TAllocState::GetMemoryUsage().ToString()); - LogMemoryStats(ctx, 256); + std::optional<TMemoryUsage> memoryUsage = TAllocState::TryGetMemoryUsage(); + if (memoryUsage) { + LOG_WARN_S(ctx, NKikimrServices::MEMORY_PROFILER, memoryUsage->ToString()); + LogMemoryStats(ctx, 256); + } } } diff --git a/ydb/core/mon_alloc/stats.cpp b/ydb/core/mon_alloc/stats.cpp index 743bb40382..09e260f777 100644 --- a/ydb/core/mon_alloc/stats.cpp +++ b/ydb/core/mon_alloc/stats.cpp @@ -297,9 +297,11 @@ namespace NKikimr { return AllocState->GetAllocatedMemoryEstimate(); } - TMemoryUsage TAllocState::GetMemoryUsage() { + std::optional<TMemoryUsage> TAllocState::TryGetMemoryUsage() { NActors::TProcStat procStat; - procStat.Fill(getpid()); + if (!procStat.Fill(getpid())) { + return { }; + } return TMemoryUsage { .AnonRss = procStat.AnonRss, .CGroupLimit = procStat.CGroupMemLim diff --git a/ydb/core/mon_alloc/stats.h b/ydb/core/mon_alloc/stats.h index e21c0eac3c..bb1fb1d6e2 100644 --- a/ydb/core/mon_alloc/stats.h +++ b/ydb/core/mon_alloc/stats.h @@ -43,6 +43,6 @@ namespace NKikimr { static std::unique_ptr<IAllocState> AllocState; static ui64 GetAllocatedMemoryEstimate(); - static TMemoryUsage GetMemoryUsage(); + static std::optional<TMemoryUsage> TryGetMemoryUsage(); }; } |