本文介紹Linux經常使用性能統計分析命令,監控進程或者系統性能。主要包括CPU(top、mpstat)、內存(vmstat、free)、I/O(iostat)、網絡性能(sar)、系統日誌信息(demsg)、查看進程狀態(pidstat)。下面簡要介紹這些命令的使用方法。html
mpstat、iostat、pidstat和sr命令須要安裝sysstat軟件包,sysstat包含了系統性能監測工具,安裝方法以下:linux
yum install sysstat # CentOS apt-get install sysstat # Ubuntu
CPU負載(cpu load)指的是某個時間點進程對系統產生的壓力。表示特定時間間隔內運行隊列中的平均進程數,若是一個進程知足如下條件則其就會位於運行隊列中:ios
單CPU滿負荷運行時cpu_load爲1,當多個CPU或多核時,至關於大橋有多個車道,滿負荷運行時cpu_load值爲CPU數或多核數;CPU負載的計算(以單CPU爲例),假設一分鐘內執行10個任務表明滿負荷,當一分鐘給出30個任務時,CPU只能處理10個,剩餘20個不能處理,cpu_load=3;docker
單核CPUshell
通常來講,每一個CPU內核當前活動進程數不大於3,則系統運行表現良好!centos
uptime命令顯示的平均負載包括了正在或準備運行在CPU上的進程和阻塞在不可中斷睡眠狀態(uninterruptible) I/O(一般是磁盤I/O)上的進程。緩存
[root@server ~]# uptime 16:54:53 up 29 days, 2:02, 1 user, load average: 0.03, 0.03, 0.00 [root@server ~]# cat /proc/loadavg 0.03 0.03 0.00 3/166 16903
ps命令是Process Status的縮寫,用於查看系統進程信息bash
ps經常使用用法,一般與grep組合使用網絡
ps ax | grep dhcpd | grep -v grep
ps -ef
顯示全部進程socket
ps -aux
顯示全部進程
ps -aux
按照CPU或者內存用量來篩選進程:
ps -aux --sort -pcpu # 或 ps -aux --sort -pmem
# 強制中斷正在執行的命令,如,命令長時間沒有響應的狀況下 Ctrl+C組合鍵 # kill命令 kill -9 進程ID # killall命令:終止指定名稱的全部進程 killall -9 dhclient
ps命令列出的是當前進程的快照,top可用於持續監視系統性能,
動態顯示進程信息。
每隔1秒檢測指定進程的cpu,檢測20次
top -d 1 -n 20
打印指定pid進程的cpu信息,間隔時間爲1s,打印20次
ps -ef | grep systemd
# 打印一次 top -p 1 -n 1 | grep systemd | awk '{print $10}' # 循環打印20次 for i in {1..20};do top -p 1 -n 1 | grep systemd | awk '{print $10}';sleep 1s;done for((i=0;i<20;i++));do top -p 1 -n 1 | grep systemd | awk '{print $10}';sleep 1s;done
默認顯示最新的10個系統信息,能夠查看致使性能問題的錯誤信息。
[root@centos7 ~]# dmesg | tail -20 [ 15.356358] RPC: Registered named UNIX socket transport module. [ 15.356360] RPC: Registered udp transport module. [ 15.356361] RPC: Registered tcp transport module. [ 15.356362] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 15.551529] type=1305 audit(1584428235.986:4): audit_pid=1054 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1 [ 19.223990] NET: Registered protocol family 40 [ 23.857606] ip6_tables: (C) 2000-2006 Netfilter Core Team [ 24.130255] Ebtables v2.0 registered [ 24.366128] Netfilter messages via NETLINK v0.30. [ 24.418582] ip_set: protocol 7 [ 24.517273] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready [ 24.521156] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None [ 24.524658] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready [ 24.524669] IPv6: ADDRCONF(NETDEV_CHANGE): ens33: link becomes ready [ 24.528687] IPv6: ADDRCONF(NETDEV_UP): ens34: link is not ready [ 24.532350] e1000: ens34 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None [ 24.535760] IPv6: ADDRCONF(NETDEV_UP): ens34: link is not ready [ 24.574912] IPv6: ADDRCONF(NETDEV_UP): ens34: link is not ready [ 25.391535] nf_conntrack version 0.5.0 (16384 buckets, 65536 max) [ 25.525351] IPv6: ADDRCONF(NETDEV_CHANGE): ens34: link becomes ready [root@centos7 ~]#
[root@centos7 ~]# dmesg | head -20 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.10.0-1062.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Wed Aug 7 18:08:02 UTC 2019 [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1062.el7.x86_64 root=UUID=d7dc0c9e-a27d-4239-aba4-7c2e51d9fc93 ro crashkernel=auto spectre_v2=retpoline rhgb quiet LANG=en_US.UTF-8 [ 0.000000] Disabled fast string operations [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007fedffff] usable [ 0.000000] BIOS-e820: [mem 0x000000007fee0000-0x000000007fefefff] ACPI data [ 0.000000] BIOS-e820: [mem 0x000000007feff000-0x000000007fefffff] ACPI NVS [ 0.000000] BIOS-e820: [mem 0x000000007ff00000-0x000000007fffffff] usable [ 0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] SMBIOS 2.7 present. [root@centos7 ~]#
全稱 virtual memory stat,逐行輸出虛擬內存狀態統計信息
[root@centos7 ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1424832 2084 195100 0 0 47 4 45 55 0 0 99 1 0
vmstat 1
:每隔一秒打印一次
[root@centos7 ~]# [root@centos7 ~]# vmstat 1 #1s打印一個 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1424472 2084 195120 0 0 28 2 30 37 0 0 99 1 0 0 0 0 1424456 2084 195120 0 0 0 0 38 53 0 0 100 0 0 0 0 0 1424456 2084
參數解釋:
查看linux內存使用狀況
[root@centos7 ~]# free -m total used free shared buff/cache available Mem: 1819 199 1471 9 148 1470 Swap: 4095 0 4095
mpstat是Multiprocessor Statistics的縮寫,實時監控CPU性能。
mpstat -P ALL 1 2
:間隔1s打印報告,共打印2個
[root@centos7 ~]# mpstat Linux 3.10.0-1062.el7.x86_64 (centos7) 03/18/2020 _x86_64_ (4 CPU) 04:41:47 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 04:41:47 AM all 0.66 0.00 1.39 2.65 0.00 0.01 0.00 0.00 0.00 95.28 [root@centos7 ~]# [root@centos7 ~]# mpstat -P ALL 1 Linux 3.10.0-1062.el7.x86_64 (centos7) 03/18/2020 _x86_64_ (4 CPU) 04:44:11 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 04:44:11 AM all 0.39 0.00 0.82 1.54 0.00 0.01 0.00 0.00 0.00 97.24 04:44:11 [root@centos7 ~]#
pidstat用於監控所有或指定進程的資源佔用狀況,和top命令相似,但不覆蓋輸出,有利於觀察數據隨時間的變更狀況,top會覆蓋以前的輸出
pidstat -p 1 1
:-p 指定進程號,間隔1s打印pid爲1的進程[root@centos7 ~]# pidstat Linux 3.10.0-1062.el7.x86_64 (centos7) 03/18/2020 _x86_64_ (4 CPU) 04:52:29 AM UID PID %usr %system %guest %CPU CPU Command 04:52:29 AM 0 1 0.05 0.19 0.00 0.24 0 systemd 04:52:29 AM 0 2 0.00 0.00 0.00 0.00 3 kthreadd 04:52:29 AM 0 6 0.00 0.00 0.00 0.00 0 ksoftirqd/0 04:52:29
iostat用於顯示CPU和塊設備(磁盤I/O)相關的統計信息
[root@centos7 ~]# iostat 1 Linux 3.10.0-1062.el7.x86_64 (centos7) 03/18/2020 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.15 0.00 0.34 0.60 0.00 98.92 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 9.46 158.59 15.05 142895 13561 scd0 0.02 1.14 0.00 1028 0
avg-cpu:整體cpu使用狀況統計信息
linux各類設備文件在/dev目錄下能夠看到
sar(System ActivityReporter):系統活動狀況報告,
是Linux系統性能分析工具。能夠用來分析磁盤I/O、CPU效率、內存使用等,下面介紹它的分析網絡性能用法。
檢查網絡流量的工做負載,可用來檢查網絡流量是否已經達到限額。
[root@centos7 dev]# sar -n DEV 1 Linux 4.18.0-147.5.1.el8_1.x86_64 (iZ8vb54310gt89j8qct198Z) 12/19/2020 _x86_64_ (1 CPU) 08:08:37 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 08:08:38 PM eth0 4.00 2.00 0.23 0.27 0.00 0.00 0.00 0.00 08:08:38 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:08:38 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
顯示TCP鏈接狀況,可用來描述系統負載
[root@centos7 dev]# sar -n TCP,ETCP 1 Linux 4.18.0-147.5.1.el8_1.x86_64 (iZ8vb54310gt89j8qct198Z) 12/19/2020 _x86_64_ (1 CPU) 08:15:48 PM active/s passive/s iseg/s oseg/s 08:15:49 PM 0.00 0.00 1.00 1.00 08:15:48 PM atmptf/s estres/s retrans/s isegerr/s orsts/s 08:15:49 PM 0.00 0.00 0.00 0.00 0.00
文章標題:Linux經常使用命令:性能命令
本文做者:hiyo
本文連接:https://www.cnblogs.com/hiyong/p/14175939.html 歡迎關注公衆號:「測試開發小記」及時接收最新技術文章!