使用Top_X插件排查内存过载问题原创
3年前
16724310
Top命令是Linux 系统下常用的监控工具,用于实时获取进程级别的 CPU 或内存使用情况。
XPocket中的Top_X为Linux Top的增强版,可以显示CPU占用率/负载,CPU及内存进程使用的list。它对于繁杂的top命令输出进行了功能的拆分和整理,更加清晰易用,支持管道化,尤其可以直接拿到top进程或线程tid,pid; mem_s命令增加了按照进程swap大小占用排序增强了原有top功能。
下面我们模拟一机器内存泄漏使用了大量物理内存导致物理内存飙升的情况:
#include <stdio.h>
int fff()
{
int i = 0;
while(1)
{
sleep(1);
void *m = malloc(1024*1024);
memset(m,0,1024*1024); // 不用memset这么多,只需要memset每个page的第一个字节偷懒了
i++;
printf("size = %d M\n", i);
if( (i%1000 == 0) && (i/1000 != 0))
{
printf("size = %d M, sleep 30\n", i );
sleep(30); //多等待下 防止虚拟机swap占
}
}
return 0;
}
int ddd()
{
fff();
return 0;
}
int main()
{
ddd();
return 0;
}
初始状态下内存空闲:
运行上述程序大量使用物理内存,Linux内存紧张, 模拟内存泄漏,触发系统swapper进程,测试可以观察到swap 空间被占用:
使用top_x插件看一下具体信息发现很多进程的内存被swap出去:
说明内存已经比较紧张了,通过top_x mem_r 命令查看下哪个进程占用的物理内存最多:
可以看到我们的useallmem+ 占用的物理内存高达 5.7g , 超过了内存总量的 74.9%之多。
Top_X插件下载地址:https://plugin.xpocket.perfma.com/plugin/65
XPocket下载地址:
https://xpocket.perfma.com/docs/download/
点赞收藏
分类: