我有一堆作为 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}')