Linux:找出耗尽所有虚拟内存的内容

时间:2020-01-09 10:34:15  来源:igfitidea点击:

如何列出或显示正在耗尽Debian或Ubuntu Linux服务器下所有虚拟内存的所有进程,可执行文件和共享库,以进行故障排除?
虚拟内存不过是Linux和许多其他现代操作系统使用的内存管理技术。

内存统计工具 memstat,它结合了磁盘驱动器(硬盘或ssd等)上的活动RAM和不活动内存,以形成大范围的连续地址。
您可以使用memstat命令查看正在耗尽虚拟内存的所有进程,可执行文件和共享库。
该命令必须以root用户身份运行,以查看所有正在运行的进程的数据。
该输出旨在帮助您识别正在使用过多内存的程序,并减少总体内存浪费。
语法如下:

memstat
memstat -w
memstat -p PID-HERE

-w选项会导致较宽的打印输出:行在80列处不会被截断。

-p选项使memstat仅打印通过查看具有给定PID的进程(例如Apache进程)收集的数据。

例子

键入以下命令:

# memstat

或者

$ sudo memstat

输出示例(来自我的家用nfs服务器):

272k: PID     1 (/sbin/init)
    536k: PID   467 (/sbin/udevd)
    532k: PID   586 (/sbin/udevd)
    276k: PID  1191 (/sbin/portmap)
    296k: PID  1204 (/sbin/rpc.statd)
    308k: PID  1222 (/usr/sbin/rpc.idmapd)
    268k: PID  1385 (/usr/sbin/vnstatd)
  91028k: PID  1424 (/usr/sbin/rsyslogd)
    416k: PID  1473 (/sbin/mdadm)
   1068k: PID  1493 (/usr/bin/atop)
    464k: PID  1517 (/usr/sbin/atd)
    404k: PID  1520 (/usr/sbin/rpc.mountd)
    476k: PID  1530 (/usr/sbin/cron)
    300k: PID  1539 (/usr/sbin/acpid)
    560k: PID  1545 (/usr/sbin/sshd)
   2056k(      8k): /usr/lib/libnfsidmap/nsswitch.so 1222
-------
633108k (  15844k)

输出说明

  • 首先,列出了过程。显示内存量以及进程ID和该进程正在运行的可执行文件的名称。显示的内存量不包括共享内存:它仅包含该进程专用的内存。
  • 完成这些过程后,将列出共享对象。显示内存量以及共享库的文件名,然后是使用共享库的进程列表。
  • 最后,显示总计。

仅获取有关Apache或Nginx或Lighttpd进程的数据

首先,找到Web服务器的pid:

# pidof httpd
# pidof nginx
# pidof lighttpd

使用以下语法仅显示通过使用PID 3535查看过程收集的数据

# memstat -p 3535