linux实战:ps和top命令系统调优
1、linux下查看sleep状态的进程:(ps -l)
[root@ttAlgorithm-tomcat-online101-jylt ~]# ps -efl | head
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 4839 poll_s Jan05 ? 00:00:06 /sbin/init
1 S root 2 0 0 80 0 - 0 kthrea Jan05 ? 00:00:00 [kthreadd]
1 S root 3 2 0 -40 - - 0 migrat Jan05 ? 00:00:43 [migration/0]
1 S root 4 2 0 80 0 - 0 ksofti Jan05 ? 00:02:24 [ksoftirqd/0]
1 S root 5 2 0 -40 - - 0 cpu_st Jan05 ? 00:00:00 [stopper/0]
5 S root 6 2 0 -40 - - 0 watchd Jan05 ? 00:00:13 [watchdog/0]
1 S root 7 2 0 -40 - - 0 migrat Jan05 ? 00:00:34 [migration/1]
1 S root 8 2 0 -40 - - 0 cpu_st Jan05 ? 00:00:00 [stopper/1]
1 S root 9 2 0 80 0 - 0 ksofti Jan05 ? 00:01:09 [ksoftirqd/1]
各个列含义:
F:代表这个进程旗标 (process flags),说明这个进程的权限,常见有:
若4 表示此进程的权限 root ;
若1 則表示此子进程仅能fork。
S:代表这个进程的状态 (STAT),主要的状态有:
R (Running):该进程正在运行;
S (Sleep):该进程正在睡眠,可被唤醒。
D :不可被唤醒
T :停止状态(stop);
Z (Zombie):僵尸进程。
UID/PID/PPID:代表『此进程被该 UID 所拥有/进程的 PID 号/此进程的父进程 PID 』
C:代表 CPU 使用率,单位为百分比;
PRI/NI:Priority/Nice 的缩写,代表此进程被 CPU 所执行的优先顺序,数值越小代表该进程越快被 CPU 执行。
ADDR/SZ/WCHAN:都与内存,ADDR 是 kernel function,指出该进程在内存的哪個部分,如果是个 running 进程,一般就会显示『 - 』 / SZ 代表此进程用掉多少内存 / WCHAN 表示目前进程是否工作,同样的, 若为 - 表示正在工作中。
TTY:登入者的终端机位置,若为远程登入则使用动态終端介面 (pts/n);
TIME:使用掉的 CPU 时间,注意,是实际花费掉的 CPU 运作的时间,而不是系統时间;
CMD:就是 command 的缩写,造成此进程的指令。
2、查看进程状态信息:
# cat /proc/30276/status
Name: java
State: S (sleeping)
Tgid: 30276
Pid: 30276
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
Utrace: 0
FDSize: 512
Groups: 0
VmPeak: 26622128 kB
VmSize: 26614976 kB
VmLck: 0 kB
VmHWM: 944056 kB
VmRSS: 937028 kB
VmData: 26457872 kB
VmStk: 88 kB
VmExe: 4 kB
VmLib: 15796 kB
VmPTE: 2748 kB
VmSwap: 0 kB
Threads: 155
SigQ: 2/256717
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000002
SigCgt: 2000000181005ccd
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 1
nonvoluntary_ctxt_switches: 3
3、linux下统计线程数:
1)统计当前系统线程页:(ps -efL)
# ps -efL | grep -v $$ | wc -l
650
注:其中$$ 表示脚本运行的当前进程ID号
2)Linux下查看某个进程的线程数量:
方法一:pstree -p 进程id | wc -l
# pstree -p 30276
java(30276)─┬─{java}(30277)
├─{java}(30278)
├─{java}(30279)
├─{java}(30280)
├─{java}(30281)
├─{java}(30282)
├─{java}(30283)
├─{java}(30284)
├─{java}(30285)
├─{java}(30286)
├─{java}(30287)
├─{java}(30288)
├─{java}(30289)
├─{java}(30290)
├─{java}(30291)
方法二:top -Hp 进程号
Tasks: 155 total, 0 running, 155 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32880500k total, 17735632k used, 15144868k free, 308996k buffers
Swap: 4194300k total, 0k used, 4194300k free, 14014444k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30364 root 20 0 25.4g 915m 11m S 0.3 2.8 1:54.37 java
30398 root 20 0 25.4g 915m 11m S 0.3 2.8 1:57.57 java
30399 root 20 0 25.4g 915m 11m S 0.3 2.8 0:06.34 java
30440 root 20 0 25.4g 915m 11m S 0.3 2.8 1:54.48 java
30455 root 20 0 25.4g 915m 11m S 0.3 2.8 0:07.52 java
30515 root 20 0 25.4g 915m 11m S 0.3 2.8 0:29.62 java
30723 root 20 0 25.4g 915m 11m S 0.3 2.8 0:29.63 java
32392 root 20 0 25.4g 915m 11m S 0.3 2.8 0:03.12 java
30276 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
30277 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.88 java
30278 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.30 java
30279 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.25 java
30280 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.23 java
30281 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.28 java
30282 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.25 java
30283 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.21 java
30284 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.27 java
30285 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.31 java
30286 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
30287 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
30288 root 20 0 25.4g 915m 11m S 0.0 2.8 0:01.33 java
30289 root 20 0 25.4g 915m 11m S 0.0 2.8 0:03.95 java
30290 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.07 java
30291 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.08 java
30292 root 20 0 25.4g 915m 11m S 0.0 2.8 0:00.00 java
参考:http://www.bubuko.com/infodetail-976020.html
4、top和ps命令各个列含义:
1)ps aux:
# ps aux | head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19356 1260 ? Ss Jan05 0:06 /sbin/init
root 2 0.0 0.0 0 0 ? S Jan05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jan05 0:44 [migration/0]
root 4 0.0 0.0 0 0 ? S Jan05 2:24 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S Jan05 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S Jan05 0:13 [watchdog/0]
root 7 0.0 0.0 0 0 ? S Jan05 0:34 [migration/1]
root 8 0.0 0.0 0 0 ? S Jan05 0:00 [stopper/1]
root 9 0.0 0.0 0 0 ? S Jan05 1:09 [ksoftirqd/1]
解释如下:
VSZ–进程的虚拟大小
RSS–驻留集的大小,可以理解为内存中页的数量
TTY–控制终端的ID
STAT–也就是当前进程的状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STRAT–这个很简单,就是该进程启动的时间
TIME–进程已经消耗的CPU时间,注意是消耗CPU的时间
COMMOND–命令的名称和参数
应用:用ps大概统计下所有程序占用的总内存
ps aux | awk '{mem += $6} END {print mem/1024/1024}'
2)top
top - 12:35:14 up 136 days, 20:38, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 391 total, 1 running, 390 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: 32880500k total, 17735940k used, 15144560k free, 308996k buffers
Swap: 4194300k total, 0k used, 4194300k free, 14022888k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30276 root 20 0 25.4g 913m 11m S 1.0 2.8 19:50.88 java
9419 root 20 0 15296 1500 952 R 0.3 0.0 0:00.05 top
15257 root 20 0 8419m 1.6g 27m S 0.3 5.1 352:21.36 java
1 root 20 0 19356 1260 940 S 0.0 0.0 0:06.37 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:44.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 2:24.97 ksoftirqd/0
解释:
VIRT:virtual memory usage 虚拟内存,进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量。
RES:resident memory usage 常驻内存,进程当前使用的内存大小,包含其他进程的共享,但不包括swap out.如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反。
SHR:shared memory 共享内存
PR:优先级;
还没有评论,来说两句吧...