1 top
查看 Linux 负载
- 查看所有进程的USER/CPU/内存/Swap/PID/Command情况
[root@es1 ~]# top
top - 14:05:43 up 61 days, 38 min, 2 users, load average: 0.11, 0.10, 0.13
Tasks: 220 total, 1 running, 219 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32880208k total, 26979156k used, 5901052k free, 509528k buffers
Swap: 16777212k total, 68k used, 16777144k free, 6755296k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4358 elastics 20 0 35.8g 17g 86m S 2.0 54.5 3428:50 java
4606 sdc 20 0 13.9g 1.0g 15m S 0.3 3.3 179:04.36 java
1 root 20 0 19232 1328 1128 S 0.0 0.0 0:13.40 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:16.02 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:32.50 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:07.29 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 0:01.35 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1
9 root 20 0 0 0 0 S 0.0 0.0 0:06.38 ksoftirqd/1
10 root RT 0 0 0 0 S 0.0 0.0 0:06.91 watchdog/1
11 root RT 0 0 0 0 S 0.0 0.0 0:01.47 migration/2
12 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/2
13 root 20 0 0 0 0 S 0.0 0.0 0:05.49 ksoftirqd/2
14 root RT 0 0 0 0 S 0.0 0.0 0:06.41 watchdog/2
15 root RT 0 0 0 0 S 0.0 0.0 0:00.73 migration/3
16 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/3
17 root 20 0 0 0 0 S 0.0 0.0 0:04.71 ksoftirqd/3
18 root RT 0 0 0 0 S 0.0 0.0 0:06.19 watchdog/3
19 root RT 0 0 0 0 S 0.0 0.0 0:01.34 migration/4
20 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/4
21 root 20 0 0 0 0 S 0.0 0.0 0:03.63 ksoftirqd/4
22 root RT 0 0 0 0 S 0.0 0.0 0:06.13 watchdog/4
23 root RT 0 0 0 0 S 0.0 0.0 0:00.82 migration/5
24 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/5
25 root 20 0 0 0 0 S 0.0 0.0 0:04.76 ksoftirqd/5
26 root RT 0 0 0 0 S 0.0 0.0 0:05.96 watchdog/5
27 root RT 0 0 0 0 S 0.0 0.0 0:01.47 migration/6
28 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/6
29 root 20 0 0 0 0 S 0.0 0.0 0:03.99 ksoftirqd/6
30 root RT 0 0 0 0 S 0.0 0.0 0:05.96 watchdog/6
31 root RT 0 0 0 0 S 0.0 0.0 0:00.64 migration/7
32 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/7
33 root 20 0 0 0 0 S 0.0 0.0 0:03.76 ksoftirqd/7
top 解释:
【第1行】 top - 14:05:43 up 61 days, 38 min, 2 users, load average: 0.11, 0.10, 0.13
14:05:43 # 系统当前时间
up 61 days, 38min # 系统已启用时间: 系统开机到现在已达61天38分钟
2 users # 当前2个用户在线
load average: 0.11, 0.10, 0.13 # 系统1分钟、5分钟、15分钟的CPU负载值。
单位时间段内CPU活动进程数。
如果你的机器为单核,那么只要这几个值均<1,代表系统就没有负载压力;
如果你的机器为N核,那么必须是这几个值均<N才可认为系统没有负载压力;
"单CPU系统1-3和SMP系统6-10都是可能接受的。"
【第2行#任务/进程#】Tasks: 220 total, 1 running, 219 sleeping, 0 stopped, 0 zombie
220 total:当前有220个任务
1 running:1个任务正在运行
219 sleeping:219个进程处于睡眠状态
0 stopped:停止的进程数
0 zombie:僵死的进程数
【第3行#CPU#】Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
0.2%us:"user CPU time" / 用户态进程占用CPU时间百分比
0.1%sy:"system CPU time" / 内核占用CPU时间百分比
0.0%ni:" nice CPU time" / 用户进程空间内改变过优先级的进程占用CPU百分比。renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思.
99.7%id:"idle" / 空闲CPU时间百分比
0.0%wa:"io wait" / 等待I/O的CPU时间百分比
0.0%hi:"hardware irq" / CPU硬中断时间百分比
0.0%si:"software irq" / CPU软中断时间百分比
0.0%st: "steal time" / 虚拟机偷取(steal)的时间。
一台物理是可以虚拟化出多台虚拟机,在其中一台虚拟机上用top查看发现st不为0,就说明本来有这么多个cpu时间是安排给我这个虚拟机的;
但是由于某种虚拟技术,把这个cpu时间分配给了其他的虚拟机了。这就叫做偷取。
详见: http://melody-dc.com/2015/11/21/%E7%90%86%E8%A7%A3CPU-steal-time/
【第4行#内存#】 Mem: 32880208k total, 26979156k used, 5901052k free, 509528k buffers
32880208k total:物理内存总数
26979156k used: 已使用的物理内存
5901052k free: 空闲的物理内存
509528k buffers: 用作缓冲区的内存 [缓存]
【第5行#交换空间#】 Swap: 16777212k total, 68k used, 16777144k free, 6755296k cached
16777212k total:交换空间的总量
68kk used: 使用的交换空间
16777144k free:空闲的交换空间
6755296k cached:缓存的交换空间
【第6行#进程#】PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID
USER:进程的所有者
PR:进程的优先级
NI:nice值
VIRT:占用的虚拟内存
RES:占用的物理内存
SHR:使用的共享内存
S:进行状态 S:休眠 R运行 Z僵尸进程 N nice值为负
%CPU:占用的CPU
%MEM:占用内存
TIME+: 占用CPU的时间的累加值
COMMAND:启动命令
2 uptime
查看 Linux 负载
[root@xxx ~]# uptime
09:21:06 up 47 days, 15:48, 2 users, load average: 0.45, 0.33, 0.27
uptime解释: 参考top命令的第1行解释
3 w
查看 Linux 负载
[root@xxx ~]# w
09:21:48 up 47 days, 15:49, 2 users, load average: 0.52, 0.36, 0.28
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.11.244 14Sep20 16:51m 0.25s 0.25s -bash
root pts/1 10.0.11.119 09:00 0.00s 0.00s 0.00s w
w解释
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
USER — 登录的用户名
TTY — 登录后系统分配的终端号
FROM — 远程主机名,即从哪儿登录来的
LOGIN@ — 何时登录
IDLE — 空闲了多长时间,表示用户闲置的时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
JCPU — 和该终端(tty)连接的所有进程占用的时间,这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
PCPU — 指当前进程(即在WHAT项中显示的进程)所占用的时间
WHAT — 当前正在运行进程的命令行
4 vmstat
查看 Linux 负载
[root@xxx ~]# vmstat
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 593508 961904 336788 2067244 0 0 0 4 0 0 0 0 99 0 0
[root@xxx ~]#vmstat 5 5 【在5秒时间内进行5次采样】
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 593508 958208 336960 2067472 0 0 0 4 0 0 0 0 99 0 0
0 0 593508 958216 336964 2067476 0 0 0 48 857 1668 0 0 99 0 0
vmstat解释:
[procs]
r - 运行队列中进程数。多少个进程真的分配到CPU;当这个值超过了CPU数目,就会出现CPU瓶颈。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b - 阻塞队列中进程数。
[memory]
swpd - 虚拟内存已使用的大小(KB)[593508/1024=579.59MB]。如果大于0,表示当前机器的物理内存不足了;如果不是程序内存泄露的原因,那么该升级内存了或者把耗内存的任务迁移到其他机器。
free - 空闲的物理内存的大小(KB)[961904/1024=939.36MB]。
buff - 缓冲区大小(KB)[336788/1024=328.89MB]。
cache - 缓存大小(KB)[2067244/1024=2018.79]。
[swap]
si - 每秒从磁盘读入虚拟内存的大小。如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so - 每秒虚拟内存写入磁盘的大小。如果这个值大于0,同上。
[io]
bi - 块设备每秒接收的块数量。这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024Byte。
bo - 块设备每秒发送的块数量。例如读取文件时,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
[system]
in - interrupt / 每秒CPU的中断次数,包括时间中断。
cs - count/second / 每秒上下文切换次数。例如: 我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
[cpu]
us - user time / 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy - system time / 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id - 空闲 CPU时间,一般来说,id + us + sy = 100,一般认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wa - 等待IO CPU时间。
vmstat命令使用,更多详见: Linux vmstat命令详解 - 博客园/小a玖拾柒
5 free
查看当前系统的【内存】及使用状况
[root@es1 elasticsearch]# free -h
total used free shared buffers cached
Mem: 31G 8.8G 22G 160K 497M 6.5G
-/+ buffers/cache: 1.8G 29G
Swap: 15G 68K 15G