Centos7 如何查看谁使用了内存?ps -aux | sort -k4nr是什么


这样的内存使用正常吗?为何2G内存一下子就只剩下600MB


 [root@aliyun ~]# ps -aux | sort -k4nr
mysql     1053  0.3  6.4 1173436 122392 ?      Sl   Jun29   4:40 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr
/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
apache   12179  0.2  1.8 872784 35764 ?        S    07:24   1:56 php-fpm: pool www
apache   12399  0.2  1.8 872692 35184 ?        S    07:32   1:54 php-fpm: pool www
apache   12178  0.2  1.7 870512 33172 ?        S    07:24   1:56 php-fpm: pool www
apache   12215  0.2  1.7 870408 33220 ?        S    07:25   1:57 php-fpm: pool www
apache   12177  0.2  1.6 868764 31832 ?        S    07:24   1:57 php-fpm: pool www
apache   12180  0.2  1.6 868712 31836 ?        S    07:24   1:56 php-fpm: pool www
apache   12181  0.2  1.6 868584 31620 ?        S    07:24   1:57 php-fpm: pool www
apache   13245  0.2  1.6 868504 31396 ?        S    08:03   1:49 php-fpm: pool www
apache   14554  0.2  1.6 868196 31276 ?        S    08:52   1:42 php-fpm: pool www
apache   19058  0.2  1.6 868296 31116 ?        S    10:55   1:16 php-fpm: pool www
root     12173  0.0  0.8 505932 16444 ?        Ss   07:24   0:02 php-fpm: master process (/etc/php-fpm.conf)
root      1207  0.2  0.6 770380 12368 ?        Sl   Jun29   2:35 /usr/local/aegis/aegis_client/aegis_00_73/AliYunDun
root      1222  0.1  0.5 780056 10304 ?        Sl   Jun29   2:12 /usr/local/aegis/alihids/AliHids
nginx    13802  0.0  0.2 113140  4932 ?        S    08:23   0:10 nginx: worker process
nginx    13803  0.0  0.2 113448  5180 ?        S    08:23   0:10 nginx: worker process
root         1  0.0  0.2 138196  4028 ?        Ss   Jun29   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root      1723  0.1  0.2 135912  5604 ?        Ss   19:03   0:00 sshd: root@pts/0
ntp        446  0.0  0.1  29604  2084 ?        Ss   Jun29   0:00 /usr/sbin/ntpd -u ntp:ntp -g
root     13801  0.0  0.1 109580  2104 ?        Ss   08:23   0:00 nginx: master process /usr/sbin/nginx
root      1736  0.1  0.1 116408  3184 pts/0    Ss   19:03   0:00 -bash
root       352  0.0  0.1  43016  3112 ?        Ss   Jun29   0:00 /usr/lib/systemd/systemd-journald
root       408  0.0  0.1 208224  3596 ?        Ssl  Jun29   0:00 /usr/sbin/rsyslogd -n
root       647  0.0  0.1 463456  2576 ?        Ssl  Jun29   0:41 /usr/local/aegis/aegis_update/AliYunDunUpdate
root       864  0.0  0.1  82492  3592 ?        Ss   Jun29   0:00 /usr/sbin/sshd -D
dbus       415  0.0  0.0  28632  1652 ?        Ss   Jun29   0:01 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-a
ctivation
mysql      895  0.0  0.0 115344  1700 ?        Ss   Jun29   0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
nscd       416  0.0  0.0 711504  1476 ?        Ssl  Jun29   0:00 /usr/sbin/nscd

1)为何里面这个 root 1207 0.2 0.6 770380 12368 ? Sl Jun29 2:35 /usr/local/aegis/aegis_client/aegis_00_73/AliYunDun 这一段,表示的是占用了770多MB内存?还是12MB内存?
2)如何将这些数字格式成 MB单位的,现在貌似是 byte 单位。
3) 这个 k4nr 代表了什么,网上有一些 ps -aux | sort -k4nr | head 5 说可以只显示头5条,但centos7中运行报错 head: cannot open ‘5’ for reading: No such file or directory

php-fpm centos7 内存

暗暗的布丁 9 years, 7 months ago

1) 12M内存.正常来说,你单纯的ps -aux会显示每列的参数的名称.
比如这样
clipboard.png
VSZ是表示虚拟内存占用的大小,RSS是表示实际内存占用大小.另外你从内存占用的百分比也可以看出来,不可能是700多M的.
2)ps内并没有相关的标志位可以设置将kb转为Mb,可以自己用脚本转换或者外部工具
3)-k4nr是sort命令的参数,k4表示比较的是第四个key,也就是内存占用%的那一列,n是按照数字方式来比较,r表示反转排序结果,默认是从低到高,r之后就变成从高到低.如果你要用展示最初的5条,应该再加上head -n 5.而不是直接用head 5.

PS:都是很基本的Linux命令使用,楼主要花点时间学习下了.

tyrant answered 9 years, 7 months ago

我自己在 ~/.bashrc 里定义的查看进程内存的函数:


 mem () 
{ 
    top -n1 -b | head -n7 | sed '1,6d' && top -n1 -b | sed '1,7d' | grep --color=auto $1;
    ps aux | grep --color=auto $1 | grep --color=auto -v grep | awk -F " " '{ sum += $6 } END { printf "Total Memory Usage: %.1f MB\n", sum/1024 }'
}

重启终端或者source ~/.bashrc后生效.
使用:
mem fpm
图片描述
ps aux里的RSS(Resident Set Size)对应top里的RES,表示常驻内存,就是我们经常说的程序占用的内存.
你用ps查看前5条应该这样写:
ps aux | sort -k4nr | head -n5
另外,top里面按Shift+M是按内存排序,按E是切换内存单位,按Shfit+W保存设置.
然后执行top -n1 -b可以看到按内存排序的所有进程的信息.

Eyemi answered 9 years, 7 months ago

Your Answer