监控 cgroup 的 swap 使用情况

监控 cgroup 的 swap 使用情况

我有一堆作为 systemd 单元运行的 .NET Core 应用程序。主机内存不足,并且交换使用率缓慢增加到 100%,因此我怀疑一个或多个服务存在内存泄漏。

当我运行htop所有服务时,它们都显示在进程下dotnet,因此我看不到单个服务的值。当我systemd-cgtop在重启之前和之后运行时(从 100% 交换变为几乎没有),应用程序的内存值相似。

我如何才能找出哪个 systemd 单元正在使用不断增加的交换空间?

答案1

获取按内存排序的 dotnet 进程的 pid

ps -o pid,user,%mem,command ax | grep dotnet | grep -v grep | sort -b -k3 -r

要找到 systemd-unit,您可以询问 systemctl

systemctl status -l <pid>

或者仅获取使用内存最多的进程:

systemctl status -l $(ps -o pid,user,%mem,command ax | grep dotnet | grep -v grep | sort -b -k3 -r | tail -n +2 | head -n 1 | awk '{print $1}')

相关内容