来自公众号:Linux运维学习
整理出了三个有关性能监控和优化命令详细讲解,文章很长,涉及top命令、free命令和vmstat命令,真的是很详细的讲解,希望能帮到大家
1
top命令
[root@TG1704 log]# top
top - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35
Tasks: 206 total, 1 running, 205 sleeping, stopped, zombie
Cpu(s): 5.9%us, 3.4%sy, .0%ni, 90.4%id, .0%wa, .0%hi, .2%si, .0%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 1501m 405m 10m S 52.2 1.3 2534:16 java
18249 root 18 3201m 1.9g 11m S 35.9 6.0 569:39.41 java
2808 root 25 3333m 1.0g 11m S 24.3 3.1 526:51.85 java
25668 root 23 3180m 704m 11m S 14.0 2.2 360:44.53 java
574 root 25 3168m 611m 10m S 12.6 1.9 556:59.63 java
1599 root 20 3237m 1.9g 11m S 12.3 6.2 262:01.14 java
1008 root 21 3147m 842m 10m S .3 2.6 4:31.08 java
13823 root 23 3031m 2.1g 10m S .3 6.8 176:57.34 java
28218 root 15 12760 1168 808 R .3 .0 :01.43 top
29062 root 20 1241m 227m 10m S .3 .7 2:07.32 java
1 root 15 10368 684 572 S .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
<以上代码可复制粘贴,可往左滑>
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的时候就表明系统在超负荷运转了。
系统现在共有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)
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
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 — 进程名称(命令名/命令行)
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
我们发现进程id为2570的“top”进程被加亮了,top进程就是视图第二行显示的的运行态(runing)的那个进程,可以通过敲击“y”键关闭或打开运行态进程的加亮效果。
可以看到,top默认的排序列是“%CPU”。
下图是按一次”shift + >”的效果图,视图现在已经按照%MEM来排序。
2
free 命令
[root@SF1150 service]# free
total used free shared buffers cached
Mem: 32940112 30841684 2098428 4545340 11363424
-/+ buffers/cache: 14932920 18007192
Swap: 32764556 1944984 30819572
[root@SF1150 service]# free -g
total used free shared buffers cached
Mem: 31 29 2 4 10
-/+ buffers/cache: 14 17
Swap: 31 1 29
[root@SF1150 service]# free -m
total used free shared buffers cached
Mem: 32168 30119 2048 4438 11097
-/+ buffers/cache: 14583 17584
Swap: 31996 1899 30097
<以上代码可复制粘贴,可往左滑>
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是2098428KB,已用内存是30841684KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如本机情况的可用内存为:
18007156=2098428KB+4545340KB+11363424KB
[root@SF1150 service]# cat /proc/meminfo
MemTotal: 32940112 kB
MemFree: 2096700 kB
Buffers: 4545340 kB
Cached: 11364056 kB
SwapCached: 1896080 kB
Active: 22739776 kB
Inactive: 7427836 kB
HighTotal: kB
HighFree: kB
LowTotal: 32940112 kB
LowFree: 2096700 kB
SwapTotal: 32764556 kB
SwapFree: 30819572 kB
Dirty: 164 kB
Writeback: kB
AnonPages: 14153592 kB
Mapped: 20748 kB
Slab: 590232 kB
PageTables: 34200 kB
NFS_Unstable: kB
Bounce: 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
[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]#
[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命令
[root@localhost ~]# vmstat 5 6procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
3029876 199616 690980 2 3 2 100
3029752 199616 690980 41 1009 39 100
3029752 199616 690980 3 1004 36 100
3029752 199616 690980 4 1004 36 100
3029752 199616 690980 6 1003 33 100
<以上代码可复制粘贴,可往左滑>
0 0 0 3029752 199616 690980 0 0 0 5 1003 33 0 0 100 0 0
说明:
字段说明:
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时间
备注: 如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。如果pi,po 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。
[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
3029752 387728 513076 1005 34 100
3029752 387728 513076 22 1004 36 100
3029752 387728 513076 1004 33 100
3029752 387728 513076 1003 32 100
<以上代码可复制粘贴,可往左滑>
[root@localhost ~]#
说明:
使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。
字段说明:
Memory(内存):
inact: 非活跃内存大小(当使用-a选项时显示)
active: 活跃的内存大小(当使用-a选项时显示)
实例3:查看系统已经fork了多少次
命令:
vmstat -f
输出:
[root@SCF1129 ~]# vmstat -f
12744849 forks
[root@SCF1129 ~]#
[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
<以上代码可复制粘贴,可往左滑>
[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 ~]#
[root@SCF1129 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda3 1119336548 27642068 1034835500 3% /tmpfs 32978376 32978376 % /dev/shm
/dev/sda1 1032088 59604 920056 7% /boot
[root@SCF1129 ~]# vmstat -p /dev/sda1
sda1 reads read sectors writes requested writes
18607 4249978 6 48[root@SCF1129 ~]# vmstat -p /dev/sda3
sda3 reads read sectors writes requested writes
429350 35176268 28998789 980301488[root@SCF1129 ~]#
[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 64 59
Acpi-Parse 40 92
Acpi-State 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 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
<以上代码可复制粘贴,可往左滑>