超级干货:3个性能监控和优化命令详解
1 top命令
top [参数]
命令参数:
-b 批处理 -c 显示完整的治命令 -I 忽略失效过程 -s 保密模式 -S 累积模式 -i<时间> 设置间隔时间 -u<用户名> 指定用户名 -p<进程号> 指定进程 -n<次数> 循环显示的次数
4.使用实例:
实例1:显示进程信息
命令:top
输出:
[root@TG1704 log]# toptop - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 3.4%sy, .%ni, 90.4%id, .%wa, .%hi, .2%si, .%st
Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers
Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java
18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java
2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java
25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java
574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java
1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java
1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java
13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java
28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top
29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java
1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init
2 root RT -5 S .0 .0 :01.01 migration/
3 root 34 19 S .0 .0 :00.00 ksoftirqd/
4 root RT -5 S .0 .0 :00.00 watchdog/
5 root RT -5 S .0 .0 :00.80 migration/1
6 root 34 19 S .0 .0 :00.00 ksoftirqd/1
7 root RT -5 S .0 .0 :00.00 watchdog/1
8 root RT -5 S .0 .0 :20.59 migration/2
9 root 34 19 S .0 .0 :00.09 ksoftirqd/2
10 root RT -5 S .0 .0 :00.00 watchdog/2
11 root RT -5 S .0 .0 :23.66 migration/3
12 root 34 19 S .0 .0 :00.03 ksoftirqd/3
13 root RT -5 S .0 .0 :00.00 watchdog/3
14 root RT -5 S .0 .0 :20.29 migration/4
15 root 34 19 S .0 .0 :00.07 ksoftirqd/4
16 root RT -5 S .0 .0 :00.00 watchdog/4
17 root RT -5 S .0 .0 :23.07 migration/5
18 root 34 19 S .0 .0 :00.07 ksoftirqd/5
19 root RT -5 S .0 .0 :00.00 watchdog/5
20 root RT -5 S .0 .0 :17.16 migration/6
21 root 34 19 S .0 .0 :00.05 ksoftirqd/6
22 root RT -5 S .0 .0 :00.00 watchdog/6
23 root RT -5 S .0 .0 :58.28 migration/7
说明:
行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:
14:06:23:当前系统时间 up 70 days, 16:44:系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!) 2 users:当前有2个用户登录系统 load average: 1.15, 1.42, 1.44:load average 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。 load average 数据是每隔 5 秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑 CPU 的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行,Tasks — 任务(进程),具体信息说明如下:
系统现在共有 206 个进程,其中处于运行中的有1个,205 个在休眠(sleep),stoped状态的有0个,zombie 状态(僵尸)的有0个。
5.9%us:用户空间占用CPU的百分比。 3.4% sy:内核空间占用CPU的百分比。 0.0% ni:改变过优先级的进程占用CPU的百分比 90.4% id:空闲CPU百分比 0.0% wa:IO等待占用CPU的百分比 0.0% hi:硬中断(Hardware IRQ)占用CPU的百分比 0.2% si:软中断(Software Interrupts)占用CPU的百分比
32949016k total — 物理内存总量(32GB) 14411180k used — 使用中的内存总量(14GB) 18537836k free — 空闲内存总量(18GB) 169884k buffers — 缓存的内存量 (169M)
32764556k total — 交换区总量(32GB) 0k used — 使用的交换区总量(0K) 32764556k free — 空闲交换区总量(32GB) 3612636k cached — 缓冲的交换区总量(3.6GB)
PID:进程id USER:进程所有者 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:进程名称(命令名/命令行)
敲击键盘“x”(打开/关闭排序列的加亮效果),top的视图变化如下:
可以看到,top默认的排序列是“%CPU”。
4.通过”shift + >”或”shift + <”可以向右或左改变排序列
下图是按一次”shift + >”的效果图,视图现在已经按照%MEM来排序。
2、free 命令
free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是经常使用的命令之一。
free [参数]
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
-b 以Byte为单位显示内存使用情况。 -k 以KB为单位显示内存使用情况。 -m 以MB为单位显示内存使用情况。 -g 以GB为单位显示内存使用情况。 -o 不显示缓冲区调节列。 -s <间隔秒数> 持续观察内存使用状况。 -t 显示内存总和列。 -V 显示版本信息。
-
-
-
free
free -g
free -m
输出:
[root@SF1150 service]# free
total used free shared buffers cached
Mem: 32940112 30841684 2098428 4545340 11363424-/+ buffers/cache: 14932920 18007192Swap: 32764556 1944984 30819572[root@SF1150 service]# free -g
total used free shared buffers cached
Mem: 31 29 2 4 10-/+ buffers/cache: 14 17Swap: 31 1 29[root@SF1150 service]# free -m
total used free shared buffers cached
Mem: 32168 30119 2048 4438 11097-/+ buffers/cache: 14583 17584Swap: 31996 1899 30097
说明:
total:总计物理内存的大小。 used:已使用多大。 free:可用有多少。 Shared:多个进程共享的内存总额。 Buffers/cached:磁盘缓存的大小。
used:已使用多大。 free:可用有多少。
18007156=2098428KB+4545340KB+11363424KB
命令:
cat /proc/meminfo
输出:
[root@SF1150 service]# cat /proc/meminfoMemTotal: 32940112 kB
MemFree: 2096700 kB
Buffers: 4545340 kB
Cached: 11364056 kB
SwapCached: 1896080 kB
Active: 22739776 kB
Inactive: 7427836 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 32940112 kB
LowFree: 2096700 kB
SwapTotal: 32764556 kB
SwapFree: 30819572 kB
Dirty: 164 kB
Writeback: 0 kB
AnonPages: 14153592 kB
Mapped: 20748 kB
Slab: 590232 kB
PageTables: 34200 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 49234612 kB
Committed_AS: 23247544 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 278840 kB
VmallocChunk: 34359459371 kB
HugePages_Total: HugePages_Free: HugePages_Rsvd: Hugepagesize: 2048 kB
交换将通过三个途径来减少系统中使用的物理页面的个数:
减少缓冲与页面cache的大小,
将系统V类型的内存页面交换出去,
换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
Page cache 实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当 page cache 的数据需要刷新时,page cache 中的数据交给 buffer cache,因为Buffer Cache 就是缓存磁盘块的。但是这种处理在 2.6 版本的内核之后就变的很简单了,没有真正意义上的 cache 操作。
所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了。这也是linux看内存是否够用的标准。
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
实例2:以总和的形式显示内存的使用信息
命令:
free -t
输出:
[root@SF1150 service]# free -t
total used free shared buffers cached
Mem: 32940112 30845024 2095088 4545340 11364324-/+ buffers/cache: 14935360 18004752Swap: 32764556 1944984 30819572Total: 65704668 32790008 32914660[root@SF1150 service]#
说明:
实例3:周期性的查询内存使用信息
命令:
free -s 10
[root@SF1150 service]# free -s 10
total used free shared buffers cached
Mem: 32940112 30844528 2095584 4545340 11364380-/+ buffers/cache: 14934808 18005304Swap: 32764556 1944984 30819572
total used free shared buffers cached
Mem: 32940112 30843932 2096180 4545340 11364388-/+ buffers/cache: 14934204 18005908Swap: 32764556 1944984 30819572
3、vmstat
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。
1.命令格式:
free [参数]
2.命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
-b 以Byte为单位显示内存使用情况。 -k 以KB为单位显示内存使用情况。 -m 以MB为单位显示内存使用情况。 -g 以GB为单位显示内存使用情况。 -o 不显示缓冲区调节列。 -s<间隔秒数> 持续观察内存使用状况。 -t 显示内存总和列。 -V 显示版本信息。
实例1:显示内存使用情况
命令:
free
free -g
free -m
输出:
[root@SF1150 service]# free
total used free shared buffers cached
Mem: 32940112 30841684 2098428 4545340 11363424-/+ buffers/cache: 14932920 18007192Swap: 32764556 1944984 30819572[root@SF1150 service]# free -g
total used free shared buffers cached
Mem: 31 29 2 4 10-/+ buffers/cache: 14 17Swap: 31 1 29[root@SF1150 service]# free -m
total used free shared buffers cached
Mem: 32168 30119 2048 4438 11097-/+ buffers/cache: 14583 17584Swap: 31996 1899 30097
1.命令格式:
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
2.命令功能:
用来显示虚拟内存的信息
3.命令参数:
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
4.使用实例:
实例1:显示虚拟内存使用情况
命令:
vmstat
输出:
说明:
字段说明:
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间
vmstat 5 5
表示在5秒时间内进行5次采样。将得到一个数据汇总他能够反映真正的系统情况。
实例2:显示活跃和非活跃内存
命令:
vmstat -a 2 5
输出:
[root@localhost ~]# vmstat -a 2 5procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free inact active si so bi bo in cs us sy id wa st 3029752 387728 513008 2 3 2 100
0 3029752 387728 513076 0 0 0 0 1005 34 0 0 100 0 0
0 3029752 387728 513076 0 0 0 22 1004 36 0 0 100 0 0
0 3029752 387728 513076 0 0 0 0 1004 33 0 0 100 0 0
0 3029752 387728 513076 0 0 0 0 1003 32 0 0 100 0 0
说明:
使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。
字段说明:
Memory(内存):
inact: 非活跃内存大小(当使用-a选项时显示)
active: 活跃的内存大小(当使用-a选项时显示)
实例3:查看系统已经fork了多少次
命令:
vmstat -f
输出:
[root@SCF1129 ~]# vmstat -f
12744849 forks
[root@SCF1129 ~]#
说明:
这个数据是从/proc/stat中的processes字段里取得的
实例4:查看内存使用的详细信息
命令:
vmstat -s
输出:
[root@localhost ~]# vmstat -s 4043760 total memory
1013884 used memory 513012 active memory 387728 inactive memory 3029876 free memory 199616 buffer memory 690980 swap cache 6096656 total swap used swap 6096656 free swap 83587 non-nice user cpu ticks 132 nice user cpu ticks 278599 system cpu ticks 913344692 idle cpu ticks 814550 IO-wait cpu ticks 10547 IRQ cpu ticks 21261 softirq cpu ticks stolen cpu ticks 310215 pages paged in
14254652 pages paged out pages swapped in
pages swapped out 288374745 interrupts 146680577 CPU context switches 1351868832 boot time 367291 forks
说明:
这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。
实例5:查看磁盘的读/写
命令:
vmstat -d
输出:
[root@localhost ~]# vmstat -ddisk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
ram0
ram1
ram2
ram3
ram4
ram5
ram6
ram7
ram8
ram9
ram10
ram11
ram12
ram13
ram14
ram15
sda 33381 6455 615407 63224 2068111 1495416 28508288 15990289 10491
hdc
fd0
md0
[root@localhost ~]#
说明:
这些信息主要来自于/proc/diskstats.
merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.
实例6:查看/dev/sda1磁盘的读/写
命令:
输出:
[root@SCF1129 ~]# df文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 1119336548 27642068 1034835500 3% /tmpfs 32978376 0 32978376 0% /dev/shm
/dev/sda1 1032088 59604 920056 7% /boot
[root@SCF1129 ~]# vmstat -p /dev/sda1sda1 reads read sectors writes requested writes 18607 4249978 6 48[root@SCF1129 ~]# vmstat -p /dev/sda3sda3 reads read sectors writes requested writes 429350 35176268 28998789 980301488[root@SCF1129 ~]#
说明:
这些信息主要来自于/proc/diskstats。
reads:来自于这个分区的读的次数。
read sectors:来自于这个分区的读扇区的次数。
writes:来自于这个分区的写的次数。
requested writes:来自于这个分区的写请求次数。
实例7:查看系统的 slab 信息
命令:
vmstat -m
输出:
[root@localhost ~]# vmstat -mCache
Num Total Size Pages
ip_conntrack_expect 136 28
ip_conntrack 3 13 304 13
ip_fib_alias 11 59 64 59
ip_fib_hash 11 59 64 59
AF_VMCI 960 4
bio_map_info 100 105 1064 7
dm_mpath 1064 7
jbd_4k 4096 1
dm_uevent 2608 3
dm_tio 24 144
dm_io 48 77
scsi_cmd_cache 10 10 384 10
sgpool-128 32 32 4096 1
sgpool-64 32 32 2048 2
sgpool-32 32 32 1024 4
sgpool-16 32 32 512 8
sgpool-8 45 45 256 15
scsi_io_context 112 34
ext3_inode_cache 51080 51105 760 5
ext3_xattr 36 88 88 44
journal_handle 18 144 24 144
journal_head 56 80 96 40
revoke_table 4 202 16 202
revoke_record 32 112
uhci_urb_priv 56 67
UNIX 13 33 704 11
flow_cache 128 30
msi_cache 33 59 64 59
cfq_ioc_pool 14 90 128 30
cfq_pool 12 90 216 18
crq_pool 16 96 80 48
deadline_drq 80 48
as_arq 96 40
mqueue_inode_cache 1 4 896 4
isofs_inode_cache 608 6
hugetlbfs_inode_cache 1 7 576 7
Cache Num Total Size Pages
ext2_inode_cache 720 5
ext2_xattr 88 44
dnotify_cache 40 92
dquot 256 15
eventpoll_pwq 3 53 72 53
eventpoll_epi 3 20 192 20
inotify_event_cache 40 92
inotify_watch_cache 1 53 72 53
kioctx 320 12
kiocb 256 15
fasync_cache 24 144
shmem_inode_cache 254 290 768 5
posix_timers_cache 128 30
uid_cache 128 30
ip_mrt_cache 128 30
tcp_bind_bucket 3 112 32 112
inet_peer_cache 128 30
secpath_cache 64 59
xfrm_dst_cache 384 10
ip_dst_cache 5 10 384 10
arp_cache 1 15 256 15
RAW 3 5 768 5
UDP 5 10 768 5
tw_sock_TCP 192 20
request_sock_TCP 128 30
TCP 4 5 1600 5
blkdev_ioc 14 118 64 59
blkdev_queue 20 30 1576 5
blkdev_requests 13 42 272 14
biovec-256 7 7 4096 1
biovec-128 7 8 2048 2
biovec-64 7 8 1024 4
biovec-16 7 15 256 15
biovec-4 7 59 64 59
biovec-1 23 202 16 202
bio 270 270 128 30
utrace_engine_cache 64 59
Cache Num Total Size Pages
utrace_cache 64 59
sock_inode_cache 33 48 640 6
skbuff_fclone_cache 7 7 512 7
skbuff_head_cache 319 390 256 15
file_lock_cache 1 22 176 22
Acpi-Operand 4136 4248 64 59
Acpi-ParseExt 0 0 64 59
Acpi-Parse 0 0 40 92
Acpi-State 0 0 80 48
Acpi-Namespace 2871 2912 32 112
delayacct_cache 81 295 64 59
taskstats_cache 4 53 72 53
proc_inode_cache 1427 1440 592 6
sigqueue 160 24
radix_tree_node 13166 13188 536 7
bdev_cache 23 24 832 4
sysfs_dir_cache 5370 5412 88 44
mnt_cache 26 30 256 15
inode_cache 2009 2009 560 7
dentry_cache 60952 61020 216 18
filp 479 1305 256 15
names_cache 3 3 4096 1
avc_node 14 53 72 53
selinux_inode_security 994 1200 80 48
key_jar 2 20 192 20
idr_layer_cache 74 77 528 7
buffer_head 164045 164800 96 40
mm_struct 51 56 896 4
vm_area_struct 1142 1958 176 22
fs_cache 35 177 64 59
files_cache 36 55 768 5
signal_cache 72 162 832 9
sighand_cache 68 84 2112 3
task_struct 76 80 1888 2
anon_vma 458 864 24 144
pid 83 295 64 59
shared_policy_node 48 77
Cache Num Total Size Pages
numa_policy 37 144 24 144
size-131072(DMA) 131072 1
size-131072 0 0 131072 1
size-65536(DMA) 65536 1
size-65536 1 1 65536 1
size-32768(DMA) 32768 1
size-32768 2 2 32768 1
size-16384(DMA) 16384 1
size-16384 5 5 16384 1
size-8192(DMA) 8192 1
size-8192 7 7 8192 1
size-4096(DMA) 4096 1
size-4096 110 111 4096 1
size-2048(DMA) 2048 2
size-2048 602 602 2048 2
size-1024(DMA) 1024 4
size-1024 344 352 1024 4
size-512(DMA) 512 8
size-512 433 480 512 8
size-256(DMA) 256 15
size-256 1139 1155 256 15
size-128(DMA) 128 30
size-64(DMA) 64 59
size-64 5639 5782 64 59
size-32(DMA) 32 112
size-128 801 930 128 30
size-32 3005 3024 32 112
kmem_cache 137 137 2688 1
来源:本文转自公众号“linux就该这么学”。
相关文章