登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: linux 查看当前运行进程程序 [推荐][打造“任务管理器”]     [回主站]     [分站链接]
linux 查看当前运行进程程序 [推荐][打造“任务管理器”]
clq
浏览(219) - 2020-09-16 15:44:18 发表 编辑

关键字: linux_user

[2020-09-16 16:46:39 最后更新]
linux 查看当前运行进程程序

有很多。

1.
大致是 ps -aux|grep ... 这样进行搜索。
ps 命令很复杂,可参考后面的跟帖。

2.
然后是 top 这样查看资源占用。

通过其中的进程 pid 又可以找到对应的命令行和文件所在目录。

top 命令也很复杂。默认它会一直运行,也可以加参数当做普通命令 top -b -n 1


----------------------------------------------------------------
3.使用which查找 命令 所在位置

which用来查看当前要执行的命令所在的位置

[xiaokang@localhost ~]$ which virtualenvwrapper.sh
/usr/bin/virtualenvwrapper.sh

它会输出virtualenvwrapper.sh命令默认执行路径 即 PATH环境的设置路径


4.使用whereis查找该命令或文件夹的所在位置

[xiaokang@localhost ~]$ whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz

它会输出所有的带有nginx的文件或命名所在位置路径

----------------------------------------------------------------
5.
ll /proc/[PID]

Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。

----------------------------------------------------------------
6.
top 命令称之为 linux“性能分析工具”,这样的命令还有
lsof

lsof(list open files)是一个列出当前系统打开文件的工具。通过lsof工具能够查看这个列表对系统检测及排错,常见的用法:

查看文件系统阻塞 lsof /boot

查看端口号被哪个进程占用 lsof -i : 3306

查看用户打开哪些文件 lsof –u username

查看进程打开哪些文件 lsof –p 4838

查看远程已打开的网络链接 lsof –i @192.168.34.128


clq  2020-09-16 16:07:35 发表 编辑


Linux查看进程运行的完整路径方法

通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。这时,我们需要通过以下的方法来查看进程的详细信息:

Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。

ll /proc/PID







cwd符号链接的是进程运行目录;

exe符号连接就是执行程序的绝对路径;

cmdline就是程序运行时输入的命令行命令;

environ记录了进程运行时的环境变量;

fd目录下是进程打开或使用的文件的符号连接。
posted on 2014-07-11 09:30

转载于:https://www.cnblogs.com/signalWord/articles/3837018.html

clq  2020-09-16 16:10:43 发表 编辑

ps 命令很复杂。

https://www.cnblogs.com/jiqing9006/p/10036676.html
----------------------------------------------------------------


linux ps 命令参数详解

-a 显示所有终端机下执行的进程,除了阶段作业领导者之外。
   a 显示现行终端机下的所有进程,包括其他用户的进程。
  -A 显示所有进程。
  -c 显示CLS和PRI栏位。
   c 列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
  -C<指令名称>  指定执行指令的名称,并列出该指令的进程的状况。
  -d  显示所有进程,但不包括阶段作业领导者的进程。
  -e  此参数的效果和指定"A"参数相同。
   e  列出进程时,显示每个进程所使用的环境变量。
  -f  显示UID,PPIP,C与STIME栏位。
   f  用ASCII字符显示树状结构,表达进程间的相互关系。
  -g<群组名称>  此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
   g  显示现行终端机下的所有进程,包括群组领导者的进程。
  -G<群组识别码>  列出属于该群组的进程的状况,也可使用群组名称来指定。
   h  不显示标题列。
  -H  显示树状结构,表示进程间的相互关系。
  -j或j  采用工作控制的格式显示进程状况。
  -l或l  采用详细的格式来显示进程状况。
   L  列出栏位的相关信息。
  -m或m  显示所有的执行绪。
   n  以数字来表示USER和WCHAN栏位。
  -N  显示所有的进程,除了执行ps指令终端机下的进程之外。
  -p<进程识别码>  指定进程识别码,并列出该进程的状况。
   p<进程识别码>  此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
   r  只列出现行终端机正在执行中的进程。
  -s<阶段作业>  指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
   s  采用进程信号的格式显示进程状况。
   S  列出进程时,包括已中断的子进程资料。
  -t<终端机编号>  指定终端机编号,并列出属于该终端机的进程的状况。
   t<终端机编号>  此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
  -T  显示现行终端机下的所有进程。
  -u<用户识别码>  此参数的效果和指定"-U"参数相同。
   u  以用户为主的格式来显示进程状况。
  -U<用户识别码>  列出属于该用户的进程的状况,也可使用用户名称来指定。
   U<用户名称>  列出属于该用户的进程的状况。
   v  采用虚拟内存的格式显示进程状况。
  -V或V  显示版本信息。
  -w或w  采用宽阔的格式来显示进程状况。 
   x  显示所有进程,不以终端机来区分。
   X  采用旧式的Linux i386登陆格式显示进程状况。
   -y 配合参数"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位。

常用组合

ps -ef
ps aux 或 ps -aux
ps auxc 或 ps -auxc
ps axjf 或 ps -axjf
ps axjfc 或 ps -axjfc

# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 43392 3600 ? Ss 8月31 2:44 /usr/lib/systemd/systemd --system --deserialize 2
root 2 0.0 0.0 0 0 ? S 8月31 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 8月31 0:27 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 8月31 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 8月31 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 8月31 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 8月31 18:33 [rcu_sched]
root 10 0.0 0.0 0 0 ? S 8月31 0:35 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 8月31 0:00 [kdevtmpfs]
root 13 0.0 0.0 0 0 ? S< 8月31 0:00 [netns]
root 14 0.0 0.0 0 0 ? S 8月31 0:02 [khungtaskd]
root 15 0.0 0.0 0 0 ? S< 8月31 0:00 [writeback]
root 16 0.0 0.0 0 0 ? S< 8月31 0:00 [kintegrityd]
root 17 0.0 0.0 0 0 ? S< 8月31 0:00 [bioset]
root 18 0.0 0.0 0 0 ? S< 8月31 0:00 [kblockd]
root 19 0.0 0.0 0 0 ? S< 8月31 0:00 [md]
root 25 0.0 0.0 0 0 ? S 8月31 0:01 [kswapd0]
root 26 0.0 0.0 0 0 ? SN 8月31 0:00 [ksmd]
root 27 0.0 0.0 0 0 ? SN 8月31 0:13 [khugepaged]
root 28 0.0 0.0 0 0 ? S< 8月31 0:00 [crypto]
root 36 0.0 0.0 0 0 ? S< 8月31 0:00 [kthrotld]
root 38 0.0 0.0 0 0 ? S< 8月31 0:00 [kmpath_rdacd]
root 39 0.0 0.0 0 0 ? S< 8月31 0:00 [kpsmoused]
root 40 0.0 0.0 0 0 ? S< 8月31 0:00 [ipv6_addrconf]
root 59 0.0 0.0 0 0 ? S< 8月31 0:00 [deferwq]
root 103 0.0 0.0 0 0 ? S 8月31 0:00 [kauditd]
root 231 0.0 0.0 0 0 ? S< 8月31 0:00 [ata_sff]
root 235 0.0 0.0 0 0 ? S 8月31 0:00 [scsi_eh_0]
root 236 0.0 0.0 0 0 ? S< 8月31 0:00 [scsi_tmf_0]
root 237 0.0 0.0 0 0 ? S 8月31 0:00 [scsi_eh_1]
root 238 0.0 0.0 0 0 ? S< 8月31 0:00 [scsi_tmf_1]
root 241 0.0 0.0 0 0 ? S< 8月31 0:00 [ttm_swap]
root 253 0.0 0.0 0 0 ? S< 8月31 0:09 [kworker/0:1H]
root 258 0.0 0.0 0 0 ? S 8月31 0:15 [jbd2/vda1-8]
root 259 0.0 0.0 0 0 ? S< 8月31 0:00 [ext4-rsv-conver]
root 326 0.0 2.0 77900 37748 ? Ss 8月31 0:26 /usr/lib/systemd/systemd-journald
root 434 0.0 0.0 0 0 ? S< 8月31 0:00 [edac-poller]
dbus 455 0.0 0.0 24552 1676 ? Ss 8月31 0:30 /bin/dbus-daemon --system --address=systemd: --no
root 463 0.0 0.1 24712 1888 ? Ss 8月31 0:18 /usr/lib/systemd/systemd-logind
root 506 0.0 0.0 110044 664 ttyS0 Ss+ 8月31 0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0
root 507 0.0 0.0 110044 676 tty1 Ss+ 8月31 0:00 /sbin/agetty --noclear tty1 linux
root 710 0.0 0.6 113372 12596 ? Ss 8月31 0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclie
root 3410 0.0 0.1 65372 2292 ? Ssl 8月31 20:47 /usr/sbin/aliyun-service
root 5700 0.0 0.0 0 0 ? S 9月27 0:00 [kworker/u2:0]
root 6002 0.0 0.2 145264 3784 ? Ssl 8月31 106:24 /usr/local/redis/bin/redis-server 127.0.0.1:6379
root 9118 0.0 0.2 112812 4312 ? Ss 9月27 0:01 /usr/sbin/sshd -D
ntp 10506 0.0 0.0 29908 1576 ? Ss 8月31 0:31 /usr/sbin/ntpd -u ntp:ntp -g
root 13259 0.0 0.1 24584 2236 ? Ss 11月14 0:00 nginx: master process /usr/local/nginx/sbin/ngin
root 13270 0.0 0.0 113308 1624 ? S 11月14 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datad
root 13410 0.0 0.0 0 0 ? S 9月07 0:17 [kworker/u2:1]
mysql 13766 0.0 2.8 633408 52944 ? Sl 11月14 8:09 /usr/local/mysql/bin/mysqld --basedir=/usr/local
root 13789 0.0 0.3 277616 6336 ? Ss 11月14 0:40 php-fpm: master process (/usr/local/php/etc/php-
www 13790 0.0 0.7 285268 14104 ? S 11月14 0:07 php-fpm: pool www
www 13791 0.0 0.7 285296 14120 ? S 11月14 0:08 php-fpm: pool www
www 13792 0.0 0.8 287392 16568 ? S 11月14 0:08 php-fpm: pool www
www 13793 0.0 0.8 287528 16364 ? S 11月14 0:07 php-fpm: pool www
www 13794 0.0 0.8 288040 16944 ? S 11月14 0:07 php-fpm: pool www
www 13795 0.0 0.8 287388 16216 ? S 11月14 0:07 php-fpm: pool www
www 13796 0.0 0.8 286360 15224 ? S 11月14 0:07 php-fpm: pool www
www 13797 0.0 0.8 287388 16552 ? S 11月14 0:07 php-fpm: pool www
www 13798 0.0 0.8 287788 16624 ? S 11月14 0:07 php-fpm: pool www
www 13799 0.0 1.0 289692 20444 ? S 11月14 0:07 php-fpm: pool www
www 13820 0.0 1.2 45796 23628 ? S 11月14 0:01 nginx: worker process
www 13836 0.0 0.8 287780 16608 ? S 11月14 0:07 php-fpm: pool www
www 14585 0.0 0.7 284956 13628 ? S 11月15 0:07 php-fpm: pool www
root 17985 0.0 0.0 126280 1604 ? Ss 9月27 0:09 /usr/sbin/crond -n
root 18012 0.0 0.0 55508 1104 ? Sroot 18066 0.0 1.2 320876 22880 ? Ssl 9月27 4:07 /usr/sbin/rsyslogd -n
root 18139 0.0 0.0 25904 944 ? Ss 9月27 0:00 /usr/sbin/atd -f
polkitd 18222 0.0 0.7 538432 13964 ? Ssl 9月27 0:09 /usr/lib/polkit-1/polkitd --no-debug
root 18272 0.0 0.8 573812 16848 ? Ssl 9月27 9:24 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 20334 0.0 0.0 0 0 ? S 11月28 0:04 [kworker/0:2]
root 20357 0.0 0.0 44232 1720 ? Ss 11月28 0:00 /usr/lib/systemd/systemd-udevd
root 20532 0.0 0.1 31672 3192 ? Ssl 9月13 28:29 /usr/local/aegis/aegis_update/AliYunDunUpdate
root 20543 0.3 0.8 141904 16888 ? Ssl 9月13 346:19 /usr/local/aegis/aegis_client/aegis_10_51/AliYunD
root 22201 0.0 0.0 0 0 ? R 11月28 0:06 [kworker/0:1]
root 24044 0.0 0.3 157208 6020 ? Ss 10:06 0:00 sshd: root@pts/0
root 24046 0.0 0.1 115436 2060 pts/0 Ss 10:06 0:00 -bash

# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 8月31 ? 00:02:44 /usr/lib/systemd/systemd --system --deserialize 22
root 2 0 0 8月31 ? 00:00:00 [kthreadd]
root 3 2 0 8月31 ? 00:00:27 [ksoftirqd/0]
root 5 2 0 8月31 ? 00:00:00 [kworker/0:0H]
root 7 2 0 8月31 ? 00:00:00 [migration/0]
root 8 2 0 8月31 ? 00:00:00 [rcu_bh]
root 9 2 0 8月31 ? 00:18:33 [rcu_sched]
root 10 2 0 8月31 ? 00:00:35 [watchdog/0]
root 12 2 0 8月31 ? 00:00:00 [kdevtmpfs]
root 13 2 0 8月31 ? 00:00:00 [netns]
root 14 2 0 8月31 ? 00:00:02 [khungtaskd]
root 15 2 0 8月31 ? 00:00:00 [writeback]
root 16 2 0 8月31 ? 00:00:00 [kintegrityd]
root 17 2 0 8月31 ? 00:00:00 [bioset]
root 18 2 0 8月31 ? 00:00:00 [kblockd]
root 19 2 0 8月31 ? 00:00:00 [md]
root 25 2 0 8月31 ? 00:00:01 [kswapd0]
root 26 2 0 8月31 ? 00:00:00 [ksmd]
root 27 2 0 8月31 ? 00:00:13 [khugepaged]
root 28 2 0 8月31 ? 00:00:00 [crypto]
root 36 2 0 8月31 ? 00:00:00 [kthrotld]
root 38 2 0 8月31 ? 00:00:00 [kmpath_rdacd]
root 39 2 0 8月31 ? 00:00:00 [kpsmoused]
root 40 2 0 8月31 ? 00:00:00 [ipv6_addrconf]
root 59 2 0 8月31 ? 00:00:00 [deferwq]
root 103 2 0 8月31 ? 00:00:00 [kauditd]
root 231 2 0 8月31 ? 00:00:00 [ata_sff]
root 235 2 0 8月31 ? 00:00:00 [scsi_eh_0]
root 236 2 0 8月31 ? 00:00:00 [scsi_tmf_0]
root 237 2 0 8月31 ? 00:00:00 [scsi_eh_1]
root 238 2 0 8月31 ? 00:00:00 [scsi_tmf_1]
root 241 2 0 8月31 ? 00:00:00 [ttm_swap]
root 253 2 0 8月31 ? 00:00:09 [kworker/0:1H]
root 258 2 0 8月31 ? 00:00:15 [jbd2/vda1-8]
root 259 2 0 8月31 ? 00:00:00 [ext4-rsv-conver]
root 326 1 0 8月31 ? 00:00:26 /usr/lib/systemd/systemd-journald
root 434 2 0 8月31 ? 00:00:00 [edac-poller]
dbus 455 1 0 8月31 ? 00:00:30 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile -
root 463 1 0 8月31 ? 00:00:18 /usr/lib/systemd/systemd-logind
root 506 1 0 8月31 ttyS0 00:00:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
root 507 1 0 8月31 tty1 00:00:00 /sbin/agetty --noclear tty1 linux
root 710 1 0 8月31 ? 00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf
root 3410 1 0 8月31 ? 00:20:47 /usr/sbin/aliyun-service
root 5700 2 0 9月27 ? 00:00:00 [kworker/u2:0]
root 6002 1 0 8月31 ? 01:46:24 /usr/local/redis/bin/redis-server 127.0.0.1:6379
root 9118 1 0 9月27 ? 00:00:01 /usr/sbin/sshd -D
ntp 10506 1 0 8月31 ? 00:00:31 /usr/sbin/ntpd -u ntp:ntp -g
root 13259 1 0 11月14 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/ngi
root 13270 1 0 11月14 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql
root 13410 2 0 9月07 ? 00:00:17 [kworker/u2:1]
mysql 13766 13270 0 11月14 ? 00:08:09 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/u
root 13789 1 0 11月14 ? 00:00:40 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 13790 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13791 13789 0 11月14 ? 00:00:08 php-fpm: pool www
www 13792 13789 0 11月14 ? 00:00:08 php-fpm: pool www
www 13793 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13794 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13795 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13796 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13797 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13798 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13799 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 13820 13259 0 11月14 ? 00:00:01 nginx: worker process
www 13836 13789 0 11月14 ? 00:00:07 php-fpm: pool www
www 14585 13789 0 11月15 ? 00:00:07 php-fpm: pool www
root 17985 1 0 9月27 ? 00:00:09 /usr/sbin/crond -n
root 18012 1 0 9月27 ? 00:00:04 /sbin/auditd
root 18066 1 0 9月27 ? 00:04:07 /usr/sbin/rsyslogd -n
root 18139 1 0 9月27 ? 00:00:00 /usr/sbin/atd -f
polkitd 18222 1 0 9月27 ? 00:00:09 /usr/lib/polkit-1/polkitd --no-debug
root 18272 1 0 9月27 ? 00:09:24 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 20334 2 0 11月28 ? 00:00:04 [kworker/0:2]
root 20357 1 0 11月28 ? 00:00:00 /usr/lib/systemd/systemd-udevd
root 20532 1 0 9月13 ? 00:28:29 /usr/local/aegis/aegis_update/AliYunDunUpdate
root 20543 1 0 9月13 ? 05:46:20 /usr/local/aegis/aegis_client/aegis_10_51/AliYunDun
root 22201 2 0 11月28 ? 00:00:06 [kworker/0:1]
root 24044 9118 0 10:06 ? 00:00:00 sshd: root@pts/0
root 24046 24044 0 10:06 pts/0 00:00:00 -bash
root 24094 24046 0 10:23 pts/0 00:00:00 ps -ef

# ps axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 S 0 0:27 \_ [ksoftirqd/0]
2 5 0 0 ? -1 S< 0 0:00 \_ [kworker/0:0H]
2 7 0 0 ? -1 S 0 0:00 \_ [migration/0]
2 8 0 0 ? -1 S 0 0:00 \_ [rcu_bh]
2 9 0 0 ? -1 R 0 18:33 \_ [rcu_sched]
2 10 0 0 ? -1 S 0 0:35 \_ [watchdog/0]
2 12 0 0 ? -1 S 0 0:00 \_ [kdevtmpfs]
2 13 0 0 ? -1 S< 0 0:00 \_ [netns]
2 14 0 0 ? -1 S 0 0:02 \_ [khungtaskd]
2 15 0 0 ? -1 S< 0 0:00 \_ [writeback]
2 16 0 0 ? -1 S< 0 0:00 \_ [kintegrityd]
2 17 0 0 ? -1 S< 0 0:00 \_ [bioset]
2 18 0 0 ? -1 S< 0 0:00 \_ [kblockd]
2 19 0 0 ? -1 S< 0 0:00 \_ [md]
2 25 0 0 ? -1 S 0 0:01 \_ [kswapd0]
2 26 0 0 ? -1 SN 0 0:00 \_ [ksmd]
2 27 0 0 ? -1 SN 0 0:13 \_ [khugepaged]
2 28 0 0 ? -1 S< 0 0:00 \_ [crypto]
2 36 0 0 ? -1 S< 0 0:00 \_ [kthrotld]
2 38 0 0 ? -1 S< 0 0:00 \_ [kmpath_rdacd]
2 39 0 0 ? -1 S< 0 0:00 \_ [kpsmoused]
2 40 0 0 ? -1 S< 0 0:00 \_ [ipv6_addrconf]
2 59 0 0 ? -1 S< 0 0:00 \_ [deferwq]
2 103 0 0 ? -1 S 0 0:00 \_ [kauditd]
2 231 0 0 ? -1 S< 0 0:00 \_ [ata_sff]
2 235 0 0 ? -1 S 0 0:00 \_ [scsi_eh_0]
2 236 0 0 ? -1 S< 0 0:00 \_ [scsi_tmf_0]
2 237 0 0 ? -1 S 0 0:00 \_ [scsi_eh_1]
2 238 0 0 ? -1 S< 0 0:00 \_ [scsi_tmf_1]
2 241 0 0 ? -1 S< 0 0:00 \_ [ttm_swap]
2 253 0 0 ? -1 S< 0 0:09 \_ [kworker/0:1H]
2 258 0 0 ? -1 S 0 0:15 \_ [jbd2/vda1-8]
2 259 0 0 ? -1 S< 0 0:00 \_ [ext4-rsv-conver]
2 434 0 0 ? -1 S< 0 0:00 \_ [edac-poller]
2 13410 0 0 ? -1 S 0 0:17 \_ [kworker/u2:1]
2 5700 0 0 ? -1 S 0 0:00 \_ [kworker/u2:0]
2 20334 0 0 ? -1 S 0 0:04 \_ [kworker/0:2]
2 22201 0 0 ? -1 S 0 0:06 \_ [kworker/0:1]
0 1 1 1 ? -1 Ss 0 2:44 /usr/lib/systemd/systemd --system --deserialize 22
1 326 326 326 ? -1 Ss 0 0:26 /usr/lib/systemd/systemd-journald
1 455 455 455 ? -1 Ss 81 0:30 /bin/dbus-daemon --system --address=systemd: --nofork --no
1 463 463 463 ? -1 Ss 0 0:18 /usr/lib/systemd/systemd-logind
1 506 506 506 ttyS0 506 Ss+ 0 0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
1 507 507 507 tty1 507 Ss+ 0 0:00 /sbin/agetty --noclear tty1 linux
1 710 710 710 ? -1 Ss 0 0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--eth0.
1 3410 3410 3410 ? -1 Ssl 0 20:47 /usr/sbin/aliyun-service
1 10506 10506 10506 ? -1 Ss 38 0:31 /usr/sbin/ntpd -u ntp:ntp -g
1 6002 6002 6002 ? -1 Ssl 0 106:24 /usr/local/redis/bin/redis-server 127.0.0.1:6379
1 20532 20532 20532 ? -1 Ssl 0 28:29 /usr/local/aegis/aegis_update/AliYunDunUpdate
1 20543 20543 20543 ? -1 Ssl 0 346:19 /usr/local/aegis/aegis_client/aegis_10_51/AliYunDun
1 9118 9118 9118 ? -1 Ss 0 0:01 /usr/sbin/sshd -D
9118 24044 24044 24044 ? -1 Ss 0 0:00 \_ sshd: root@pts/0
24044 24046 24046 24046 pts/0 24090 Ss 0 0:00 \_ -bash
24046 24090 24090 24046 pts/0 24090 R+ 0 0:00 \_ ps axjf
1 17985 17985 17985 ? -1 Ss 0 0:09 /usr/sbin/crond -n
1 18012 18012 18012 ? -1 S 1 18066 18066 18066 ? -1 Ssl 0 4:07 /usr/sbin/rsyslogd -n
1 18139 18139 18139 ? -1 Ss 0 0:00 /usr/sbin/atd -f
1 18222 18222 18222 ? -1 Ssl 999 0:09 /usr/lib/polkit-1/polkitd --no-debug
1 18272 18272 18272 ? -1 Ssl 0 9:24 /usr/bin/python -Es /usr/sbin/tuned -l -P
1 13259 13259 13259 ? -1 Ss 0 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/
13259 13820 13259 13259 ? -1 S 1001 0:01 \_ nginx: worker process
1 13270 13100 8932 ? -1 S 0 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/lo
13270 13766 13100 8932 ? -1 Sl 1000 8:09 \_ /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql
1 13789 13789 13789 ? -1 Ss 0 0:40 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
13789 13790 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13791 13789 13789 ? -1 S 1001 0:08 \_ php-fpm: pool www
13789 13792 13789 13789 ? -1 S 1001 0:08 \_ php-fpm: pool www
13789 13793 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13794 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13795 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13796 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13797 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13798 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13799 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 13836 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
13789 14585 13789 13789 ? -1 S 1001 0:07 \_ php-fpm: pool www
1 20357 20357 20357 ? -1 Ss 0 0:00 /usr/lib/systemd/systemd-udevd

对比一下加c的效果,

# ps axjfc
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 kthreadd
2 3 0 0 ? -1 S 0 0:27 \_ ksoftirqd/0
2 5 0 0 ? -1 S< 0 0:00 \_ kworker/0:0H
2 7 0 0 ? -1 S 0 0:00 \_ migration/0
2 8 0 0 ? -1 S 0 0:00 \_ rcu_bh
2 9 0 0 ? -1 R 0 18:33 \_ rcu_sched
2 10 0 0 ? -1 S 0 0:35 \_ watchdog/0
2 12 0 0 ? -1 S 0 0:00 \_ kdevtmpfs
2 13 0 0 ? -1 S< 0 0:00 \_ netns
2 14 0 0 ? -1 S 0 0:02 \_ khungtaskd
2 15 0 0 ? -1 S< 0 0:00 \_ writeback
2 16 0 0 ? -1 S< 0 0:00 \_ kintegrityd
2 17 0 0 ? -1 S< 0 0:00 \_ bioset
2 18 0 0 ? -1 S< 0 0:00 \_ kblockd
2 19 0 0 ? -1 S< 0 0:00 \_ md
2 25 0 0 ? -1 S 0 0:01 \_ kswapd0
2 26 0 0 ? -1 SN 0 0:00 \_ ksmd
2 27 0 0 ? -1 SN 0 0:13 \_ khugepaged
2 28 0 0 ? -1 S< 0 0:00 \_ crypto
2 36 0 0 ? -1 S< 0 0:00 \_ kthrotld
2 38 0 0 ? -1 S< 0 0:00 \_ kmpath_rdacd
2 39 0 0 ? -1 S< 0 0:00 \_ kpsmoused
2 40 0 0 ? -1 S< 0 0:00 \_ ipv6_addrconf
2 59 0 0 ? -1 S< 0 0:00 \_ deferwq
2 103 0 0 ? -1 S 0 0:00 \_ kauditd
2 231 0 0 ? -1 S< 0 0:00 \_ ata_sff
2 235 0 0 ? -1 S 0 0:00 \_ scsi_eh_0
2 236 0 0 ? -1 S< 0 0:00 \_ scsi_tmf_0
2 237 0 0 ? -1 S 0 0:00 \_ scsi_eh_1
2 238 0 0 ? -1 S< 0 0:00 \_ scsi_tmf_1
2 241 0 0 ? -1 S< 0 0:00 \_ ttm_swap
2 253 0 0 ? -1 S< 0 0:09 \_ kworker/0:1H
2 258 0 0 ? -1 S 0 0:15 \_ jbd2/vda1-8
2 259 0 0 ? -1 S< 0 0:00 \_ ext4-rsv-conver
2 434 0 0 ? -1 S< 0 0:00 \_ edac-poller
2 13410 0 0 ? -1 S 0 0:17 \_ kworker/u2:1
2 5700 0 0 ? -1 S 0 0:00 \_ kworker/u2:0
2 20334 0 0 ? -1 S 0 0:04 \_ kworker/0:2
2 22201 0 0 ? -1 S 0 0:06 \_ kworker/0:1
0 1 1 1 ? -1 Ss 0 2:44 systemd
1 326 326 326 ? -1 Ss 0 0:26 systemd-journal
1 455 455 455 ? -1 Ss 81 0:30 dbus-daemon
1 463 463 463 ? -1 Ss 0 0:18 systemd-logind
1 506 506 506 ttyS0 506 Ss+ 0 0:00 agetty
1 507 507 507 tty1 507 Ss+ 0 0:00 agetty
1 710 710 710 ? -1 Ss 0 0:00 dhclient
1 3410 3410 3410 ? -1 Ssl 0 20:47 aliyun-service
1 10506 10506 10506 ? -1 Ss 38 0:31 ntpd
1 6002 6002 6002 ? -1 Ssl 0 106:25 redis-server
1 20532 20532 20532 ? -1 Ssl 0 28:29 AliYunDunUpdate
1 20543 20543 20543 ? -1 Ssl 0 346:23 AliYunDun
1 9118 9118 9118 ? -1 Ss 0 0:01 sshd
9118 24111 24111 24111 ? -1 Ss 0 0:00 \_ sshd
24111 24113 24113 24113 pts/0 24128 Ss 0 0:00 \_ bash
24113 24128 24128 24113 pts/0 24128 R+ 0 0:00 \_ ps
1 17985 17985 17985 ? -1 Ss 0 0:09 crond
1 18012 18012 18012 ? -1 S 1 18066 18066 18066 ? -1 Ssl 0 4:07 rsyslogd
1 18139 18139 18139 ? -1 Ss 0 0:00 atd
1 18222 18222 18222 ? -1 Ssl 999 0:09 polkitd
1 18272 18272 18272 ? -1 Ssl 0 9:24 tuned
1 13259 13259 13259 ? -1 Ss 0 0:00 nginx
13259 13820 13259 13259 ? -1 S 1001 0:01 \_ nginx
1 13270 13100 8932 ? -1 S 0 0:00 mysqld_safe
13270 13766 13100 8932 ? -1 Sl 1000 8:10 \_ mysqld
1 13789 13789 13789 ? -1 Ss 0 0:40 php-fpm
13789 13790 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13791 13789 13789 ? -1 S 1001 0:08 \_ php-fpm
13789 13792 13789 13789 ? -1 S 1001 0:08 \_ php-fpm
13789 13793 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13794 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13795 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13796 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13797 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13798 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13799 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 13836 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
13789 14585 13789 13789 ? -1 S 1001 0:07 \_ php-fpm
1 20357 20357 20357 ? -1 Ss 0 0:00 systemd-udevd

# pgrep php-fpm
13789
13790
13791
13792
13793
13794
13795
13796
13797
13798
13799
13836
14585

# pgrep -o php-fpm
13789

c 可以查看真实的进程名。

axjf 可以查看进程之前的管理。更加清晰。



clq  2020-09-16 16:42:30 发表 编辑


Linux系统常用压测工具和性能分析工具
不清不慎 2019-06-29 14:53:03 2666 收藏 5
分类专栏: Linux
版权

本篇文章介绍几款linux系统性能压测以及分析工具,在实际开发环境中,我们会经常使用到它们对我们的系统进行性能分析。

当我们需要判断linux系统的性能时,常常会观察几个常用的指标:平均负载、CPU使用率,IO负载等等。

那么当我们需要查看系统平均负载的时候可以使用uptime命令来查看,它代表系统1分钟内、5分钟内、15分钟内的平均负载:

[root@izuf64g0bbe3dug64wpdckz ~]# uptime
14:25:40 up 1 min, 1 user, load average: 0.08, 0.05, 0.02

1
2

那么系统负载和CPU使用率以及IO负载之间有什么关系呢?不少人以为平均负载就是CPU平均使用率,其实不然,系统平均负载准确的来说是指平均单位时间内系统中处于正在运行状态和不可中断状态的平均进程数。因此,它们之间没有准确的关系可言,分具体的场合来说明:

CPU密集的进程中,平均负载的升高是由于CPU大量被使用而导致的。
IO密集的进程中,等待IO也会导致平均负载升高,但是CPU使用率不一定很高。
大量的进程调度,频繁的进程上下文切换也会导致平均负载升高,此时CPU使用率也很高。

如果你想在自己模拟这些场景来测试系统的性能,可以使用linux预测工具stress,然后使用sysstat工具来进行CPU,IO性能的分析。

首先使用下面命令来安装上面的工具:

yum install stress
yum install sysstat

1
2

在sysstat工具包中提供了几个常用工具,mpstat是常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有CPU的平均指标。pidstat是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O以及上下文切换等性能指标。

我们可以使用stress工具来模拟CPU被打满,IO负载升高,大量进程被调度的场景。然后使用sysstat来分析性能。

比如下面模拟CPU使用率为100%的场景:

stress --cpu 1 --timeout 600

1

使用uptime工具来查看系统的平均负载:

$ watch -d uptime

Every 2.0s: uptime Sat Jun 29 14:46:35 2019

14:46:35 up 22 min, 3 users, load average: 2.49, 0.99, 0.39

1
2
3
4
5
6

使用mpstat来查看CPU使用情况:

#监控所有的CPU,每隔5秒输出一次
$ mpstat -P ALL 5

02:45:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
02:45:54 PM all 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:45:54 PM 0 99.60 0.00 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00

1
2
3
4
5
6

可以看出系统的平均负载升高是由于CPU使用率高达99%,近乎100%,那么到底是哪个进程导致CPU使用率 升高呢?

使用pidstat命令来分析:

[root@izuf64g0bbe3dug64wpdckz ~]# pidstat -u 5
Linux 3.10.0-514.26.2.el7.x86_64 (izuf64g0bbe3dug64wpdckz) 06/29/2019 _x86_64_ (1 CPU)

02:49:05 PM UID PID %usr %system %guest %CPU CPU Command
02:49:10 PM 0 1020 0.20 0.20 0.00 0.40 0 AliYunDun
02:49:10 PM 0 2130 99.40 0.00 0.00 99.40 0 stress

1
2
3
4
5
6

可以看到是stress进程导致CPU被打满。

同样的,我们可以使用stress来模拟IO负载升高的场景:

stress -i 1 --timeout 600

1

模拟大量进程调度的场景:

#模拟8个进程
stress -c 8 --timeout 600

1
2

接着可以使用上述的分析工具进行分析导致系统平均负载升高的原因。有兴趣的读者可以自己动手操作,这里不再展示。

clq  2020-09-16 16:44:06 发表 编辑


linux下常见的性能分析工具

转载于:http://bian5399.blog.51cto.com/3848702/834715

性能调优的主要目的是使系统能够有效的利用各种资源,最大的发挥应用程序和系统之间的性能融合,使应用高效、稳定的运行。但是,衡量系统资源利用率好坏的标准没有一个严格的定义,针对不同的系统和应用也没有一个统一的说法,因此,这里提供的标准其实是一个经验值,表15.1给出了判定系统资源利用状况的一般准则: 表1给出了判定系统资源利用状况的一般准则:

表1

其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU处在系统模式下的时间百分比。 %iowait:表示CPU等待输入输出完成时间的百分比。 swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。 swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。

linux下性能分析工具还有很多,例如uptime可以检查CPU的平均负载,free可以查看系统内存的使用状况,ps、top可以配合监控系统的进程运行状态,netstat可以监测网络流量状况

例如,linux系统下的一个网站系统,用户反映,网站访问速度很慢,有时无法访问。 针对这个问题,第一步要做的是检测网络,可以通过ping命令检查网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,通过这种方式,首先排除网络可能出现的问题;如果网络没有问题,接着进入第二步,对linux系统的内存使用状况进行检查,因为网站响应速度慢,一般跟内存关联比较大,通过free、vmstat等命令判断内存资源是否紧缺,如果内存资源不存在问题,进入第三步,检查系统CPU的负载状况,可以通过sar、vmstat、top等命令的输出综合判断CPU是否存在过载问题,如果CPU没有问题,继续进入第四步,检查系统的磁盘I/O是否存在瓶颈,可以通过iostat、vmstat等命令检查磁盘的读写性能,如果磁盘读写也没有问题,linux系统自身的性能问题基本排除,最后要做的是检查程序本身是否存在问题。通过这样的思路,层层检测,步步排查,性能问题就“无处藏身”,查找出现性能问题的环节也就变得非常简单。


1、vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之处是无法对某个进程进行深入分析。 vmstat使用语法如下:  vmstat [-V] [-n] [delay [count]] 各个选项及参数含义如下: l -V:表示打印出版本信息,是可选参数。 l -n:表示在周期性循环输出时,输出的头部信息仅显示一次。 l delay:表示两次输出之间的间隔时间。 l count:表示按照“delay”指定的时间间隔统计的次数。默认为1。 例如: vmstat 3 表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。 vmstat 3 5 表示每3秒更新一次输出信息,统计5次后停止输出。

下面是vmstat命令在某个系统的输出结果: [root@node1 ~]# vmstat 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0 0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0 0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0 对上面每项的输出解释如下:  procs  r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。  b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。  memory  swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。  free列表示当前空闲的物理内存数量(以k为单位)  buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。  cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。  swap  si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。  so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。 一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。  IO项显示磁盘读写状况  Bi列表示从块设备读入数据的总量(即读磁盘)(每秒kb)。  Bo列表示写入到块设备的数据总量(即写磁盘)(每秒kb) 这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。  system 显示采集间隔内发生的中断数  in列表示在某一时间间隔中观测到的每秒设备中断数。  cs列表示每秒产生的上下文切换次数。 上面这2个值越大,会看到由内核消耗的CPU时间会越多。  CPU项显示了CPU的使用状态,此列是我们关注的重点。  us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。  sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。 根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。  id 列显示了CPU处在空闲状态的时间百分比。  wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明IO等待越严重,根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)。 综上所述,在对CPU的评估中,需要重点注意的是procs项r列的值和CPU项中us、sy和id列的值。
2、sar命令

sar命令很强大,是分析系统性能的重要工具之一,通过sar指令,可以全面的获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。 sar使用格式为: sar [options] [g1] [-o filename] [interval [count] ] 各个选项及参数含义如下: l options 为命令行选项,sar命令的选项很多,下面只列出常用选项: Ø -A:显示系统所有资源设备(CPU、内存、磁盘)的运行状况。 Ø -u:显示系统所有CPU在采样时间内的负载状态。 Ø -P:显示当前系统中指定CPU的使用情况。 Ø -d:显示系统所有硬盘设备在采样时间内的使用状况。 Ø -r:显示系统内存在采样时间内的使用状况。 Ø -b:显示缓冲区在采样时间内的使用情况。 Ø -v:显示进程、文件、I节点和锁表状态。 Ø -n:显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示三个所有的信息。它们可以单独或者一起使用。 Ø -q:显示了运行队列的大小,它与系统当时的平均负载相同。 Ø -R:显示进程在采样时间内的活动情况。 Ø -y:显示终端设备在采样时间内的活动情况。 Ø -w:显示系统交换活动在采样时间内的状态。 l -o filename:表示将命令结果以二进制格式存放在文件中,filename是文件名。 l interval:表示采样间隔时间,是必须有的参数。 l count:表示采样次数,是可选参数,默认值是1。 例如: 要查看系统CPU的整体负载状况,每3秒统计一次,统计5次,可以使用以下组合: sar –u 3 5 系统的CPU计数是从0开始的,如果要查看第二颗CPU的运行负载,使用下面组合: sar –P 1 3 5 要查看系统磁盘的读写性能,使用以下组合: sar -d 3 5 同理,查看系统内存使用情况、网络运行状态,可以分别使用下面命令: sar -r 5 2 sar -n DEV 5 3

下面是sar命令对某个系统的CPU统计输出: [root@webserver ~]# sar -u 3 5 Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)

11:41:24 AM CPU %user %nice %system %iowait %steal %idle 11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83 11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50 11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92 11:41:36 AM all 0.29 0.00 0.13 0.00 0.00 99.58 11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41 Average: all 0.34 0.00 0.16 0.05 0.00 99.45 对上面每项的输出解释如下:  %user列显示了用户进程消耗的CPU 时间百分比。  %nice列显示了运行正常进程所消耗的CPU 时间百分比。  %system列显示了系统进程消耗的CPU时间百分比。  %iowait列显示了IO等待所占用的CPU时间百分比  %steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。  %idle列显示了CPU处在空闲状态的时间百分比。 这个输出是对系统整体CPU使用状况的统计,每项的输出都非常直观,并且最后一行Average是个汇总行,是上面统计信息的一个平均值。 需要注意的一点是:第一行的统计信息中包含了sar本身的统计消耗,所以%user列的值会偏高一点,不过,这不会对统计结果产生多大影响。 在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致 了整体CPU使用率不高,而应用缓慢 现象的发生 。 针对这个问题,可以对系统的每个CPU分开查询,统计每个CPU的使用情况: [root@webserver ~]# sar -P 0 3 5 Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)

06:29:33 PM CPU %user %nice %system %iowait %steal %idle 06:29:36 PM 0 3.00 0.00 0.33 0.00 0.00 96.67 06:29:39 PM 0 0.67 0.00 0.33 0.00 0.00 99.00 06:29:42 PM 0 0.00 0.00 0.33 0.00 0.00 99.67 06:29:45 PM 0 0.67 0.00 0.33 0.00 0.00 99.00 06:29:48 PM 0 1.00 0.00 0.33 0.33 0.00 98.34 Average: 0 1.07 0.00 0.33 0.07 0.00 98.53 这个输出是对系统的第一颗CPU的信息统计,需要注意的是,sar中对CPU的计数是从0开始的,因此,“sar -P 0 3 5”表示对系统的第一颗CPU进行信息统计,“sar -P 4 3 5”则表示对系统的第五颗CPU进行统计。依次类推。可以看出,上面的系统有八颗CPU。

通过sar –n组合显示系统的网络运行状态 sar提供四种不同的选项来显示网络统计信息,通过“-n”选项可以指定4个不同类型的开关:DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示关于网络错误的统计数据,SOCK显示套接字信息,FULL显示所有三个开关。请看下面的一个输出: [root@webserver ~]# sar -n DEV 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)

02:22:31 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:22:33 PM lo 31.34 31.34 37.53 37.53 0.00 0.00 0.00 02:22:33 PM eth0 199.50 279.60 17.29 344.12 0.00 0.00 0.00 02:22:33 PM eth1 5.47 4.98 7.03 0.36 0.00 0.00 0.00 02:22:33 PM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:22:33 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:22:35 PM lo 67.66 67.66 74.34 74.34 0.00 0.00 0.00 02:22:35 PM eth0 159.70 222.39 19.74 217.16 0.00 0.00 0.00 02:22:35 PM eth1 3.48 4.48 0.44 0.51 0.00 0.00 0.00 02:22:35 PM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:22:35 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:22:37 PM lo 4.52 4.52 9.25 9.25 0.00 0.00 0.00 02:22:37 PM eth0 102.51 133.67 20.67 116.14 0.00 0.00 0.00 02:22:37 PM eth1 27.14 67.34 2.42 89.26 0.00 0.00 0.00 02:22:37 PM sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: lo 34.61 34.61 40.48 40.48 0.00 0.00 0.00 Average: eth0 154.08 212.15 19.23 226.17 0.00 0.00 0.00 Average: eth1 11.98 25.46 3.30 29.85 0.00 0.00 0.00 Average: sit0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 对上面每项的输出解释如下:  IFACE表示网络接口设备。  rxpck/s表示每秒钟接收的数据包大小。  txpck/s表示每秒钟发送的数据包大小。  rxkB/s表示每秒钟接收的字节数。  txkB/s表示每秒钟发送的字节数。  rxcmp/s表示每秒钟接收的压缩数据包。  txcmp/s表示每秒钟发送的压缩数据包。  rxmcst/s表示每秒钟接收的多播数据包。 通过“sar –n”的输出,可以清楚的显示网络接口发送、接收数据的统计信息。此外还可以通过“sar -n EDEV 2 3”来统计网络错误信息等
3、iostat命令

iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视。它的输出主要显示磁盘读写操作的统计信息,同时也会给出CPU使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 iostat一般都不随系统安装,要使用iostat工具,需要在系统上安装一个Sysstat的工具包,Sysstat是一个开源软件,官方地址为http://pagesperso-orange.fr/sebastien.godard 可以选择源代码包或rpm包的方式安装,这里不在讲述安装过程,安装完毕,系统会多出3个命令:iostat、sar和mpstat。然后就可以直接在系统下运行iostat命令了。   iostat使用语法如下: iostat [ -c | -d ] [ -k ] [ -t ] [ -x [ device ] ] [ interval [ count ] ]   各个选项及参数含义如下: -c:显示CPU的使用情况。 -d:显示磁盘的使用情况。 -k:每秒以k bytes为单位显示数据。 -t:打印出统计信息开始执行的时间。 -x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。 interval:指定两次统计间隔的时间; count:按照“interval”指定的时间间隔统计的次数。

看下面的一个输出: [root@webserver ~]# iostat -c Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle 2.52 0.00 0.30 0.24 0.00 96.96 在这里,我们使用了“-c”参数,只显示系统CPU的统计信息,输出中每项代表的含义与sar命令的输出项完全相同

通过“iostat –d”命令组合也可以查看系统磁盘的使用状况,请看如下输出: [root@webserver ~]# iostat -d 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.87 2.58 114.12 6479462 286537372

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.00 0.00 0.00 0 0

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 1.00 0.00 12.00 0 24 对上面每项的输出解释如下:  Blk_read/s表示每秒读取的数据块数。  Blk_wrtn/s表示每秒写入的数据块数。  Blk_read表示读取的所有块数  Blk_wrtn表示写入的所有块数。 这里需要注意的一点是:上面输出的第一项是系统从启动以来到统计时的所有传输信息,从第二次输出的数据才代表在检测的时间段内系统的传输值。 可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有一个基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。对于这两个选项的值没有一个固定的大小,根据系统应用的不同,会有不同的值,但是有一个规则还是可以遵循的:长期的、超大的数据读写,肯定是不正常的,这种情况一定会影响系统性能。 “iostat –x”组合还提供了对每个磁盘的单独统计,如果不指定磁盘,默认是对所有磁盘进行统计,请看下面的一个输出: [root@webserver ~]# iostat -x /dev/sda 2 3 Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle 2.45 0.00 0.30 0.24 0.00 97.03

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.01 12.48 0.10 1.78 2.58 114.03 62.33 0.07 38.39 1.30 0.24

avg-cpu: %user %nice %system %iowait %steal %idle 3.97 0.00 1.83 8.19 0.00 86.14

Device:rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 195.00 0.00 18.00 0.00 1704.00 94.67 0.04 2.50 0.11 0.20

avg-cpu: %user %nice %system %iowait %steal %idle 4.04 0.00 1.83 8.01 0.00 86.18

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 4.50 0.00 7.00 0.00 92.00 13.14 0.01 0.79 0.14 0.10 这个输出基本与“sar –d”相同,需要说明的几个选项的含义为:  rrqm/s表示每秒进行merged的读操作数目。  wrqm/s表示每秒进行 merge 的写操作数目。  r/s表示每秒完成读I/O设备的次数。  w/s表示每秒完成写I/O设备的次数。  rsec/s表示每秒读取的扇区数。  wsec/s表示每秒写入的扇区数。
4、free命令

free是监控linux内存使用状况最常用的指令,看下面的一个输出: [root@webserver ~]# free -m total used free shared buffers cached Mem: 8111 7185 925 0 243 6299 -/+ buffers/cache: 643 7468 Swap: 8189 0 8189 “free –m”表示以M为单位查看内存使用情况,在这个输出中,我们重点关注的应该是free列与cached列的输出值,由输出可知,此系统共8G内存,系统空闲内存还有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系统缓存了很多的文件和目录,而对于应用程序来说,可以使用的内存还有7468M,当然这个7468M包含了Buffer Cache和Page Cache的值。在swap项可以看出,交换分区还未使用。所以从应用的角度来说,此系统内存资源还非常充足。 一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。 free命令还可以适时的监控内存的使用状况,使用“-s”参数可以在指定的时间段内不间断的监控内存的使用情况: [root@webserver ~]# free -b -s 5 total used free shared buffers cached Mem: 8505901056 7528706048 977195008 0 260112384 6601158656 -/+ buffers/cache: 667435008 7838466048 Swap: 8587149312 163840 8586985472

total used free shared buffers cached Mem: 8505901056 7526936576 978964480 0 260128768 6601142272 -/+ buffers/cache: 665665536 7840235520 Swap: 8587149312 163840 8586985472

total used free shared buffers cached Mem: 8505901056 7523987456 981913600 0 260141056 6601129984 -/+ buffers/cache: 662716416 7843184640 Swap: 8587149312 163840 8586985472 其中,“-b”表示以千字节(也就是1024字节为单位)来显示内存使用情况。


5、uptime命令

uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。看下面的一个输出: [root@webserver ~]# uptime 18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08 这里需要注意的是load average这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。
6、netstat命令

通过netstat –i组合检测网络接口状况 netstat命令提供了网络接口的详细信息,请看下面的输出: [root@webserver ~]# netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 1313129253 0 0 0 1320686497 0 0 0 BMRU eth1 1500 0 494902025 0 0 0 292358810 0 0 0 BMRU lo 16436 0 41901601 0 0 0 41901601 0 0 0 LRU 对上面每项的输出解释如下:  Iface表示网络设备的接口名称。  MTU表示最大传输单元,单位字节。  RX-OK/TX-OK表示已经准确无误的接收/发送了多少数据包。  RX-ERR/TX-ERR表示接收/发送数据包时产生了多少错误。  RX-DRP/TX-DRP表示接收/发送数据包时丢弃了多少数据包。  RX-OVR/TX-OVR表示由于误差而遗失了多少数据包。  Flg表示接口标记,其中:  L:表示该接口是个回环设备。  B:表示设置了广播地址。  M:表示接收所有数据包。  R:表示接口正在运行。  U:表示接口处于活动状态。  O:表示在该接口上禁用arp。  P:表示一个点到点的连接。 正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。 当网络传输存在问题是,可以检测网卡设备是否存在故障,如果可能,可以升级为千兆网卡或者光纤网络,还可以检查网络部署环境是否合理。 4.3 通过netstat –r组合检测系统的路由表信息 在网络不通,或者网络异常时,首先想到的就是检查系统的路由表信息,“netstat –r”的输出结果与route命令的输出完全相同,请看下面的一个实例: [root@webserver ~]# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.10.1.0 * 255.255.255.0 U 0 0 0 eth0 192.168.200.0 * 255.255.255.0 U 0 0 0 eth1 169.254.0.0 * 255.255.0.0 U 0 0 0 eth1 default 10.10.1.254 0.0.0.0 UG 0 0 0 eth0 关于输出中每项的具体含义,已经在前面章节进行过详细介绍,这里不再多讲,这里我们重点关注的是default行对应的值,default项表示系统的默认路由,对应的网络接口为eth0。
7、top命令

top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定

说明:前五行都统计系统整体信息的 下面是进程信息区 第一行: 跟uptime 一样,分别是当前时间13:48 系统运行时间3 days 当前登录用户数1user 系统负载load average:,即任务队列的平均长度

2 第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行 Tasks: 96 total 进程总数 1 running 正在运行的进程数 95 sleeping 睡眠的进程数 0 stopped 停止的进程数 0 zombie 僵尸进程数
Cpu(s): 0.0% us 用户空间占用CPU百分比 查看CPU使用率 1.0% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 100.0% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0% hi 0.0% si 0.0% st
3 最后两行为内存信息 Mem:506708k total 物理内存总量 477080k used 使用的物理内存总量 29628k free 空闲内存总量 113736k buffers 用作内核缓存的内存量 Swap: 1015800k total 交换区总量 112 used 使用的交换区总量 1015688k free 空闲交换区总量 169384k cached 缓冲的交换区总量 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。 相应的内存再次被换出时可不必再对交换区写入。
4 进程信息区 PID 进程ID PPID 父进程ID PR 优先级 NI nice值 负值表示高优先级,正值表示低优先级 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR 共享内存大小,单位kb S 进程状态 D=不可中断的睡眠状态R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU 上次更新到现在的CPU时间占用百分比 %MEM 进程使用的物理内存百分比 TIME+ 进程使用的CPU时间总计,单位1/100秒 COMMAND 命令名/命令行 二 以上只是默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。 1 通过f键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定

2 按o键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。

3 按大写的F或O键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的R键可以将当前的排序倒转。 4 使用参数: d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 p 通过指定监控进程ID来仅仅监控某个进程的状态。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名
Ctrl+L擦除并且重写屏幕。  h或者?显示帮助画面,给出一些简短的命令总结说明。   k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。   i忽略闲置和僵死进程。这是一个开关式命令。   q退出程序。   r重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。   S切换到累计模式。   s改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。   f或者F从当前显示中添加或者删除项目。   o或者O改变显示项目的顺序。   l切换显示平均负载和启动时间信息。   m切换显示内存信息。   t切换显示进程和CPU状态信息。   c切换显示命令名称和完整命令行。   M根据驻留内存大小进行排序。   P根据CPU使用百分比大小进行排序。   T根据时间/累计时间进行排序。 W将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法

clq  2020-09-16 16:44:33 发表 编辑

超全整理!Linux性能分析工具汇总合集

转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。



本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性能测试的工具展开说明。
Brendan Gregg的blog记录了更详细的性能分析工具,请移步http://www.brendangregg.com/

背景知识:具备背景知识是分析性能问题时需要了解的。比如硬件 cache;再比如操作系统内核。应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等。这里只是为本文的后续内容做一些铺垫,关于调优还有很多东西,我所不知道的比知道的要多的多,希望大家能共同学习进步。


【性能分析工具】

首先来看一张图:

上图是Brendan Gregg 的一次性能分析的分享,这里面的所有工具都可以通过man来获得它的帮助文档,下问简单介绍介绍一下常规的用法:



▲ vmstat--虚拟内存统计

vmstat(VirtualMeomoryStatistics,虚拟内存统计) 是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。


vmstat的常规用法:vmstat interval times即每隔interval秒采样一次,共采样times次,如果省略times,则一直采集数据,直到用户手动停止为止。
简单举个例子:

可以使用ctrl+c停止vmstat采集数据。


第一行显示了系统自启动以来的平均值,第二行开始显示现在正在发生的情况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,如下所示:

▪ procs:r这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)。

▪ memory:swapd列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。

▪ swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。

▪ io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。

▪ system:显示每秒中断(in)和上下文切换(cs)的数量。

▪ cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。

内存不足的表现:free memory急剧减少,回收buffer和cacher也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)


▲iostat--用于报告中央处理器统计信息

iostat用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息,默认显示了与vmstat相同的cpu使用信息,使用以下命令显示扩展的设备统计:

第一行显示的是自系统启动以来的平均值,然后显示增量的平均值,每个设备一行。

常见linux的磁盘IO指标的缩写习惯:rq是request,r是read,w是write,qu是queue,sz是size,a是verage,tm是time,svc是service。

▪rrqm/s和wrqm/s:每秒合并的读和写请求,“合并的”意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。

▪r/s和w/s:每秒发送到设备的读和写请求数。

▪rsec/s和wsec/s:每秒读和写的扇区数。

▪avgrq –sz:请求的扇区数。

▪avgqu –sz:在设备队列中等待的请求数。

▪await:每个IO请求花费的时间。

▪svctm:实际请求(服务)时间。

▪%util:至少有一个活跃请求所占时间的百分比。


▲dstat--系统监控工具

dstat显示了cpu使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat和iostat的输入更加详细且较为直观。在使用时,直接输入命令即可,当然也可以使用特定参数。

如下:dstat –cdlmnpsy



▲iotop--LINUX进程实时监控工具

iotop命令是专门显示硬盘IO的命令,界面风格类似top命令,可以显示IO负载具体是由哪个进程产生的。是一个用来监视磁盘I/O使用状况的top类工具,具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。


可以以非交互的方式使用:iotop –bod interval,查看每个进程的I/O,可以使用pidstat,pidstat –d instat。


▲pidstat--监控系统资源情况

pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。

使用方法:pidstat –d interval;pidstat还可以用以统计CPU使用信息:pidstat –u interval;统计内存信息:Pidstat –r interval。


▲top

top命令的汇总区域显示了五个方面的系统性能信息:

1.负载:时间,登陆用户数,系统平均负载;

2.进程:运行,睡眠,停止,僵尸;

3.cpu:用户态,核心态,NICE,空闲,等待IO,中断等;

4.内存:总量,已用,空闲(系统角度),缓冲,缓存;

5.交换分区:总量,已用,空闲

任务区域默认显示:进程ID,有效用户,进程优先级,NICE值,进程使用的虚拟内存,物理内存和共享内存,进程状态,CPU占用率,内存占用率,累计CPU时间,进程命令行信息。


▲htop

htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。

Htop可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。

与top相比,htop有以下优点:

▪ 可以横向或者纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。

▪ 在启动上,比top更快。

▪ 杀进程时不需要输入进程号。

▪ htop支持鼠标操作。


▲mpstat
mpstat 是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。常见用法:mpstat –P ALL interval times。


▲netstat

Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

▲常见用法:

netstat –npl 可以查看你要打开的端口是否已经打开。

netstat –rn 打印路由表信息。

netstat –in 提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲突以及当前的输出队列的长度。


▲ps--显示当前进程的状态

ps参数太多,具体使用方法可以参考man ps,常用的方法:ps aux #hsserver;ps –ef |grep #hundsun

▪ 杀掉某一程序的方法:ps aux | grep mysqld | grep –v grep | awk ‘{print $2 }’ xargs kill -9

▪ 杀掉僵尸进程:ps –eal | awk ‘{if ($2 == “Z”){print $4}}’ | xargs kill -9



▲strace

跟踪程序执行过程中产生的系统调用及接收到的信号,帮助分析程序或命令执行中遇到的异常情况。

举例:查看mysqld在linux上加载哪种配置文件,可以通过运行下面的命令:strace –e stat64 mysqld –print –defaults > /dev/null


▲uptime

能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷。


▲lsof

lsof(list open files)是一个列出当前系统打开文件的工具。通过lsof工具能够查看这个列表对系统检测及排错,常见的用法:

查看文件系统阻塞 lsof /boot

查看端口号被哪个进程占用 lsof -i : 3306

查看用户打开哪些文件 lsof –u username

查看进程打开哪些文件 lsof –p 4838

查看远程已打开的网络链接 lsof –i @192.168.34.128


▲perf

perf是Linux kernel自带的系统性能优化工具。优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature,用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能。


性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足够高,采样时间足够长,那么以上推论就比较可靠。因此,通过 tick 触发采样,我们便可以了解程序中哪些地方最耗时间,从而重点分析。


想要更深的了解本工具可以参考:
http://blog.csdn.net/trochiluses/article/details/10261339



汇总:结合以上常用的性能测试命令并联系文初的性能分析工具的图,就可以初步了解到性能分析过程中哪个方面的性能使用哪方面的工具(命令)。



【常用的性能测试工具】

熟练并精通了第二部分的性能分析命令工具,引入几个性能测试的工具,介绍之前先简单了解几个性能测试工具:



▪ perf_events: 一款随 Linux 内核代码一同发布和维护的性能诊断工具,由内核社区维护和发展。Perf 不仅可以用于应用程序的性能统计分析,也可以应用于内核代码的性能统计和分析。

更多参考:http://blog.sina.com.cn/s/blog_98822316010122ex.html。


▪ eBPF tools: 一款使用bcc进行的性能追踪的工具,eBPF map可以使用定制的eBPF程序被广泛应用于内核调优方面,也可以读取用户级的异步代码。重要的是这个外部的数据可以在用户空间管理。这个k-v格式的map数据体是通过在用户空间调用bpf系统调用创建、添加、删除等操作管理的。more: http://blog.csdn.net/ljy1988123/article/details/50444693。


▪ perf-tools: 一款基于 perf_events (perf) 和 ftrace 的Linux性能分析调优工具集。Perf-Tools 依赖库少,使用简单。支持Linux 3.2 及以上内核版本。more: https://github.com/brendangregg/perf-tools。


▪ bcc(BPF Compiler Collection): 一款使用eBPF的perf性能分析工具。一个用于创建高效的内核跟踪和操作程序的工具包,包括几个有用的工具和示例。利用扩展的BPF(伯克利数据包过滤器),正式称为eBPF,一个新的功能,首先被添加到Linux 3.15。多用途需要Linux 4.1以上BCC。

更多参考:https://github.com/iovisor/bcc#tools。


▪ ktap: 一种新型的linux脚本动态性能跟踪工具。允许用户跟踪Linux内核动态。ktap是设计给具有互操作性,允许用户调整操作的见解,排除故障和延长内核和应用程序。它类似于Linux和Solaris DTrace SystemTap。更多参考: https://github.com/ktap/ktap。


▪ Flame Graphs:是一款使用perf,system tap,ktap可视化的图形软件,允许最频繁的代码路径快速准确地识别,可以是使用github.com/brendangregg/flamegraph中的开发源代码的程序生成。

更多参考:http://www.brendangregg.com/flamegraphs.html。



一、 Linux observability tools | Linux 性能观测工具



二、Linux Performance static, benchmarking, tuning Tools | Linux 静态、性能测评、调优工具(3款共3图)

三、Linux observability Tools:sar, perf-tools, bcc/BPF | linux性能观测工具(sar, perf-tools, bcc/BPF)



四、observability + static + perf-tools/bcc 总结以上图片




更多参考: http://www.brendangregg.com/linuxperf.html


总数:5 页次:1/1 首页 尾页  
总数:5 页次:1/1 首页 尾页  


所在合集/目录
linux常用操作 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1