aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkungasc <kungasc@yandex-team.com>2023-07-31 15:41:52 +0300
committerkungasc <kungasc@yandex-team.com>2023-07-31 15:41:52 +0300
commitcdb1447faeea735496e3b3d275f6468d2e7ab574 (patch)
tree09f63708248cf45e72736b44fed91cb5675e2357
parentbc1247e1dfdca1b751a312dbc4d735e8ded26435 (diff)
downloadydb-cdb1447faeea735496e3b3d275f6468d2e7ab574.tar.gz
KIKIMR-18537 Check TProcStat.Fill return
-rw-r--r--ydb/core/mon_alloc/monitor.cpp42
-rw-r--r--ydb/core/mon_alloc/stats.cpp6
-rw-r--r--ydb/core/mon_alloc/stats.h2
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();
};
}