http://blog.jobbole.com/15430/

1,监控进程

1.1 命令top:动态查看进程情况【常用】

top 命令显示当前的活动进程,默认它是按消耗 CPU 的厉害程度进行排序,每5秒钟刷新一次列表,你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。

top - 11:09:36 up 349 days, 18:42, 12 users,  load average: 0.07, 0.11, 0.21
Tasks: 166 total,   1 running, 165 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.2%us,  0.4%sy,  0.0%ni, 97.9%id,  0.2%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:  32947976k total, 32649576k used,   298400k free,   483656k buffers
Swap:  2104504k total,  1349936k used,   754568k free, 24875996k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      16   0   784   72   40 S    0  0.0   0:31.68 init
    2 root      RT   0     0    0    0 S    0  0.0   0:36.92 migration/0
    3 root      34  19     0    0    0 S    0  0.0   0:00.92 ksoftirqd/0
    4 root      RT   0     0    0    0 S    0  0.0   0:39.63 migration/1 

1.1.1 top命令显示各列的含义

1,top 界面分为两个部分,光标上面部份显示关于系统整体性能,光标下面部份显示各进程信息。光标所在处是用来输入操作命令的。

2,统计信息区前五行是系统整体的统计信息。    

第一行是任务队列信息,同 uptime 命令的执行结果。

11:09:36当前时间
up 349 days系统运行时间,格式为时:分
12 users当前登录用户数
load average: 0.07, 0.11, 0.21系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
load avarage <3 系统良好,大于5 则有严重的性能问题。
注意,这个值还应当除以CPU数目。
第二行为进程信息

166 total进程总数
1 running正在运行的进程数
165 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数

第三行为CPU信息。当有多个CPU时,这些内容可能会超过两行。

1.2%us用户空间占用CPU百分比
0.4%sy内核空间占用CPU百分比
0.0%ni用户进程空间内改变过优先级的进程占用CPU百分比
97.9%id空闲CPU百分比
0.2%wa等待I/O的CPU时间百分比
0.0%hiCPU硬中断时间百分比
0.3%siCPU软中断时间百分比
0.0%st 
第四行为内存信息

32947976k total物理内存总量
32649576k used使用的物理内存总量
298400k free空闲内存总量
483656k buffers用作内核缓存的内存量
第五行为交换区信息

2104504k total交换区总量
1349936k used使用的交换区总量
754568k free空闲交换区总量
24875996k cached缓冲的交换区总量

3,进程信息区

序号列名含义
aPID进程id
bPPID父进程id
cRUSERReal user name
dUID进程所有者的用户id
eUSER进程所有者的用户名
fGROUP进程所有者的组名
gTTY启动进程的终端名。不是从终端启动的进程则显示为 ?
hPR优先级
iNInice值。负值表示高优先级,正值表示低优先级
jP最后使用的CPU,仅在多CPU环境下有意义
k%CPU上次更新到现在的CPU时间占用百分比
lTIME进程使用的CPU时间总计,单位秒
mTIME+进程使用的CPU时间总计,单位1/100秒
n%MEM进程使用的物理内存百分比
oVIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
pSWAP程使用的虚拟内存中,被换出的大小,单位kb。
qRES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
rCODE可执行代码占用的物理内存大小,单位kb
sDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
tSHR共享内存大小,单位kb
unFLT页面错误次数
vnDRT最后一次写入到现在,被修改过的页面数。
wS进程状态:
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
xCOMMAND命令名/命令行
yWCHAN若该进程在睡眠,则显示睡眠中的系统函数名
zFlags任务标志,参考 sched.h

1.1.2 常用命令格式

#通过指定监控进程ID来仅仅监控某个进程的状态
top -p pid 
#显示整个命令行而不只是显示命令名
top -c        
#设置为5秒刷新一次(默认)
top -d  5  

1.1.3 二次命令格式

进入top界面后:
h或者? : 显示帮助画面,给出一些简短的命令总结说明。
k  :终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i:忽略闲置和僵死进程。这是一个开关式命令。
q:  退出程序
r:  renice重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S:切换到累计模式。
s :  改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F :从当前显示中添加或者删除项目。
o或者O  :改变显示项目的顺序。
l: 切换显示平均负载和启动时间信息。即显示隐藏第一行
m: 切换显示内存信息。即显示影藏内存行
t :切换显示进程和CPU状态信息。即显示影藏CPU行
c:切换显示命令名称和完整命令行。 显示完整的命令。 这个功能很有用。
u:输入用户名xxx,只显示xxx的进程

M : 根据驻留内存大小进行排序。
P:根据CPU使用百分比大小进行排序(默认)。
T: 根据时间/累计时间进行排序。

W:  将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

1.2 命令sar:系统监控

1.2.1 命令格式

sar [options] [-A] [-o file] t [n] 
options 为命令行选项:
-A:所有报告的总和。  
-u:CPU利用率  
-v:进程、I节点、文件和锁表状态。  
-d:硬盘使用报告。  
-r:没有使用的内存页面和硬盘块。  
-g:串口I/O的情况。  
-b:缓冲区使用情况。  
-a:文件读写情况。  
-c:系统调用情况。  
-R:进程的活动情况。  
-y:终端设备活动情况。  
-w:系统交换活动。  

-o file表示将命 令结果以二进制格式 存放在文件中

t和n 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1 

1.2.1 命令实例

1 查看CPU:
每1秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件filename中
#sar -u -o filename 1 5  
Linux 2.6.16.60-0.21-xxx64-110923 (xxx64)       06/26/2013

10:30:28 AM       CPU     %user     %nice   %system   %iowait     %idle
10:30:29 AM       all      0.75      0.00      0.25      0.00     99.00
10:30:30 AM       all      0.00      0.00      0.00      0.00    100.00
10:30:31 AM       all      0.00      0.00      0.00      0.00    100.00
10:30:32 AM       all      0.25      0.00      0.00      0.00     99.75
10:30:33 AM       all      0.00      0.00      0.00      0.00    100.00
Average:          all      0.20      0.00      0.05      0.00     99.75
1 结构说明:
%usr:CPU处在用户模式下的时间百分比。  
%sys:CPU处在系统模式下的时间百分比。  
%wio:CPU等待输入输出完成时间的百分比。  
%idle:CPU空闲时间百分比。  
1 结果分析:
注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高 但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。

【注】可以用sar -f filename 查看原来的sar结果记录文件。

2 查看核心表
#sar -v 1 5
Linux 2.6.16.60-0.21-xxx64-110923 (xxx64)       06/26/2013

10:36:03 AM dentunusd   file-sz  inode-sz  super-sz %super-sz  dquot-sz %dquot-sz  rtsig-sz %rtsig-sz
10:36:04 AM   2451803      3072   2642237         0      0.00         0      0.00         0      0.00
10:36:05 AM   2451803      3072   2642237         0      0.00         0      0.00         0      0.00
10:36:06 AM   2451803      3072   2642237         0      0.00         0      0.00         0      0.00
10:36:07 AM   2451803      3072   2642237         0      0.00         0      0.00         0      0.00
10:36:08 AM   2451803      3072   2642237         0      0.00         0      0.00         0      0.00
Average:      2451803      3072   2642237         0      0.00         0      0.00         0      0.00
2 结构说明:
proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。  
inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数MAX-INODE控制。  
file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控制。  
ov:溢出出现的次数。  
Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE控制。  
2 结果分析
显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

3 查看设备使用情况
#sar -d 1 5
Linux 2.6.16.60-0.21-xxx64-110923 (xxx64)       06/26/2013

10:39:08 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:39:09 AM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

10:39:09 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:39:10 AM    dev8-0      1.00     96.00      0.00     96.00      0.01     12.00     12.00      1.20

10:39:10 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:39:11 AM    dev8-0    200.00    887.13   1695.05     12.91      0.25      1.27      1.09     21.78

10:39:11 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:39:12 AM    dev8-0     55.45   1647.52    198.02     33.29      0.40      7.29      5.07     28.12

10:39:12 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:39:13 AM    dev8-0     12.00      0.00    224.00     18.67      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0     53.98    529.08    425.50     17.68      0.13      2.49      1.90     10.28
3 结构说明
device: sar命令正在监视的块设备的名字。  
%busy: 设备忙时,传送请求所占时间的百分比。  
avque: 队列站满时,未完成请求数量的平均值。  
r+w/s: 每秒传送到设备或从设备传出的数据量。  
blks/s: 每秒传送的块数,每块512字节。  
avwait: 队列占满时传送请求等待队列空闲的平均时间。  
avserv: 完成传送请求所需平均时间(毫秒)。  
3 结果分析
在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。

4 查看缓冲区
#sar -b 1 5
Linux 2.6.16.60-0.21-xxx64-110923 (xxx64)       06/26/2013

10:41:30 AM       tps      rtps      wtps   bread/s   bwrtn/s
10:41:31 AM    126.73      0.00    126.73      0.00   1164.36
10:41:32 AM      0.00      0.00      0.00      0.00      0.00
10:41:33 AM     17.00      0.00     17.00      0.00    216.00
10:41:34 AM     16.83      0.00     16.83      0.00    300.99
10:41:35 AM     12.00      0.00     12.00      0.00    312.00
Average:        34.66      0.00     34.66      0.00    400.00
4 结构说明
bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。  
lread/s: 平均每秒从系统buffer读出的逻辑块数。  
%rcache: 在buffer cache中进行逻辑读的百分比。  
bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。  
lwrit/s: 平均每秒写到系统buffer逻辑块数。  
%wcache: 在buffer cache中进行逻辑读的百分比。  
pread/s: 平均每秒请求物理读的次数。  
pwrit/s: 平均每秒请求物理写的次数。  
4 结果分析
在 显示的内容中,最重要的是%cache和%wcache两列,它们的值体现着buffer的使用效率,%rcache的值小于90或者%wcache的值 低于65,应适当增加系统buffer的数量,buffer数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但 buffer参数值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到提高。 

1.3 命令uptime:系统启动时间与工作负载【不用】

top的最上一行

1.4 命令mpstat:检测多CPU实时信息【不用】

读取文件/proc/stat

mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具,在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

#mpstat -P ALL
Linux 2.6.16.60-0.21-xxx64-110923 (xxx)       06/25/2013

05:17:44 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
05:17:44 PM  all    1.18    0.01    0.35    0.20    0.05    0.28    0.00   97.94    319.17
05:17:44 PM    0    1.61    0.00    0.58    0.06    0.19    1.07    0.00   96.48    110.95
05:17:44 PM    1    1.13    0.01    0.30    0.48    0.00    0.02    0.00   98.05     74.08
05:17:44 PM    2    0.89    0.00    0.25    0.04    0.00    0.01    0.00   98.80     65.51
05:17:44 PM    3    1.08    0.01    0.28    0.22    0.00    0.01    0.00   98.41     68.63

1.5 命令ps:进程管理

1.5.1 三种常用范式

查阅仅自己bash相关进程:
#ps -l
查阅所有运行进程命令:
#ps aux
或者
#ps -ef

1.5.2 “ps aux” 说明

“ps -ef”比“ps aux”多一项PPID

$ps aux |more
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  10348   624 ?        Ss   Apr29   0:22 init [3]
root         2  0.0  0.0      0     0 ?        S<   Apr29   0:40 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Apr29   0:25 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S<   Apr29   0:00 [watchdog/0]
root         5  0.0  0.0      0     0 ?        S<   Apr29   0:12 [migration/1]
root         6  0.0  0.0      0     0 ?        SN   Apr29   0:18 [ksoftirqd/1]
root         7  0.0  0.0      0     0 ?        S<   Apr29   0:00 [watchdog/1]
root         8  0.0  0.0      0     0 ?        S<   Apr29   0:10 [migration/2]
root         9  0.0  0.0      0     0 ?        SN   Apr29   0:16 [ksoftirqd/2]
root        10  0.0  0.0      0     0 ?        S<   Apr29   0:00 [watchdog/2]
上述解释如下:
USER  用户名
PID   进程ID(Process ID)
PPID  父进程的进程ID(Parent Process id)
%CPU  进程的cpu占用率
%MEM  进程的内存占用率
VSZ   进程所使用的虚存的大小(Virtual Size)
RSS   进程使用的驻留集大小或者是实际内存的大小,Kbytes字节
TTY   与进程关联的终端(tty),若与终端无关,则显示(?),否则显示类似(pts/0)等
STAT  进程的状态:进程状态使用字符表示的(STAT的状态码)
START 进程启动时间和日期
TIME  进程使用的总cpu时间
COMMAND  正在执行的命令行命令
STAT狀態位常見的狀態字符
D (Uninterruptible sleep)无法中断的休眠状态(通常 IO 的进程);
R (Runnable)正在运行或在运行队列中等待
S (Sleeping)休眠中, 受阻, 在等待某个条件的形成或接受到信号
T (Terminate)停止或被追踪;
W 进入内存交换  (从内核2.6开始无效);
X 死掉的进程   (基本很少見);
Z (Zombie)僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;

1.5.3 未知执行命令时:pgrep

根据关键字查找进程

$ pgrep chrome
32575
32580
...


或使用pstree查看

$ pstree -p | grep chrome
           |-chrome-sandbox(32582)---chrome(32583)-+-chrome(32622)-+-{chrome}(32625)
           |                                       |               |-{chrome}(32627)
...

1.5.4 已知执行命令时:ps

2.1 直接查找命令:

【已知:跑了以python2.7开头的很多命令】

ps -ef | grep python2.7

$ps -ef | grep python2.7
admin    18535 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18536 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18537 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18538 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18539 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    19218  8361  0 14:24 pts/0    00:00:00 grep python2.7
2.2 过滤命令:
ps -ef | grep python2.7 | grep -v grep | grep tester.py
$ps -ef | grep python2.7|grep tester.py
admin    18535 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18536 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18537 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18538 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run
admin    18539 18484  0 14:22 pts/9    00:00:00 python2.7 tester.py sql_case/ plan run

2.3 打印进程号:

ps -ef | grep python2.7|  grep -v grep | grep tester.py | awk'{print $2}'

$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'
18535
18536
18537
18538
18539
ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | wc -l 
$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| wc -l
5

2.4 杀死进程

ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | xargs kill -9

$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| xargs kill -9

【另,如果确认之生成了进程python2.7 balabala】

亦可以killall python2.7

1.5.5 杀死进程:kill_killall

强制杀掉父进程

$ kill -9 32582
或者删除与之相关所有进程
$ killall chrome
【注】killall命令默认匹配的不是进程名,而是"commands",即该进程运行的命令(调用的程序)的名称。

1.6 命令pstree:打印进程树

以树状图显示进程,只显示进程的名字,且相同进程合并显示。

#pstree

以树状图显示进程,还显示进程PID。 
#pstree -p

以树状图显示进程PID为<pid>的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID。

#pstree 2701 
sshd-+-sshd---bash---update_and_rest---cvs
     |-sshd---bash---pstree
     `-sshd---bash

#pstree -p 2701 
sshd(2701)-+-sshd(6745)---bash(6749)---update_and_rest(14193)---cvs(14194)
           |-sshd(12626)---bash(12630)---pstree(15588)
           `-sshd(13324)---bash(13328)

1.7 命令uname:内核相关信息【简略】

#uname -a
读取文件/proc/version

2,监控内存

2.1 命令vmstat:监控虚拟内存【常用】

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
通常使用vmstat interval count(表示在5秒时间内进行5次采样)命令测试。将得到一个数据汇总他能够反映真正的系统情况。
注意:报告的 第一行值显示的是从系统启动以来的平均值(无用)。第二行之后才显示的是当前值。
#vmstat 5 
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 1545696 230416 3392220 21564928    0    1    12    68    0    0  1  1 98  0  0
 1  0 1545696 226860 3392244 21564904    0    0     2  1540  338 6142 18  8 74  0  0
 2  0 1545696 217804 3392280 21564868    0    0    76   210  294 6198 26  8 66  0  0
 2  0 1545692 215816 3392308 21564844    0    0     2   243  283 5980 43  7 50  0  0
 2  0 1545692 215384 3392340 21565840    0    0     2   200  295 6063 42  8 50  0  0
(1)进程procs: 
r:在运行队列中等待的进程数,【这个值也可以判断是否需要增加CPU(长期大于1)】
b:在等待io的进程数 。
(2)Linux 内存监控内存memoy: 
swpd:现时可用的交换内存(单位KB)。【如果 swpd 的值不为0,或者还比较大,比如超过100M了,但是 si, so 的值长期为 0,这种情况我们可以不用担心,不会影响系统性能。 】
free:空闲的内存(单位KB)。
buff: 作为buffer cache的内存,对块设备的读写进行缓冲(单位:KB)。
cache:作为page cache的内存, 文件系统的cache(单位:KB)。【如果 cache 的值大的时候,说明cache住的文件数多,如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会非常小。】
(3) Linux 内存监控swap交换页面 
si
: 从磁盘交换到内存的交换页数量,单位:KB/秒。【内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。】
so: 从内存交换到磁盘的交换页数量,单位:KB/秒。【常有人看到空闲内存(free)很少或接近于0时,就认为内存不够用了,实际上不能光看这一点的,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。】
(4) Linux 内存监控 io块设备:
bi: 发送到块设备的块数,单位:KB/秒。【随机磁盘读写的时候,这2个 值越大(如超出1M),能看到CPU在IO等待的值也会越大】
bo: 从块设备接收到的块数,单位:KB/秒。
(5)Linux 内存监控system系统: 
in: 每秒的中断数,包括时钟中断。【上面这2个值越大,会看到由内核消耗的CPU时间会越多】
cs: 每秒的环境(上下文)转换次数。
(6)Linux 内存监控cpu中央处理器:
cs: 。以百分比表示。
us:用户进程消耗的CPU时间百分比【us 的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超过50% 的使用,那么我们就该考虑优化程序算法或者进行加速了】
sy:系统内核消耗的CPU时间百分比【sy 的值高时,说明系统内核消耗的CPU资源多,这并不是良性的表现,我们应该检查原因。】
wa: IO等待消耗的CPU时间百分比【wa 的值高时,说明IO等待比较严重,这可能是由于磁盘大量作随机访问造成,也有可能是磁盘的带宽出现瓶颈(块操作)。】
id:中央处理器的空闲时间 。以百分比表示。

因此,一个最简单的判断Linux下内存是否足够的办法是, 只要基本没用到swap,这台机器的内存就是足够的

2.3 命令free:内存使用情况【常用】

读取/proc/meminfo文件
常用命令:
#free -m -s 5  #m表示以MB为单位显示(默认是KB)s表示间隔时间 这里为5秒显示一次
             total       used       free     shared    buffers     cached
Mem:         32175      31825        350          0       3362      20984
-/+ buffers/cache:       7479      24696
Swap:         2055       1509        545

第一行:【对操作系统来讲是buffers/cached 都是属于被使用】

Mem一行和top命令的Mem结果是一致的。且total(32175)=used(31825) + free(350)

第二行:【对应用程序来讲是buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.】

-/+ buffers/cache的意思相当于:
-buffers/cache 的计算后的used的内存数:used(31825) - buffers(3362) - cached(20984) = 7479
+buffers/cache 的计算后的free的内存数:free(350) + buffers(3362) + cached(20984) = 24696


buffers: 内存,指用来给块设备IO做的缓冲大小,减少实际IO次数
cache: 内存,是用来给文件做缓冲
swap: 磁盘空间,用来将内存中暂时不用的数据交换到磁盘,实现虚拟内存(缺页中断)

4,监控磁盘IO

4.1 命令iostat:监控磁盘IO【常用】

http://news.watchstor.com/new-products-131441.htm

iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。

#iostat -x 1 10
Linux 2.6.18-238.el5 (study)    08/09/11

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              11.55       423.43        29.12     329833      22686
sda1              0.11         1.24         0.00        968          2
sda2             11.41       421.92        29.12     328657      22684

参数 -x表示显示详细信息;1 10表示,数据显示每隔1秒刷新一次,共显示10次。


4.2 命令lsof:列出某个进程打开的所有文件信息【常用】

1、不带任何参数运行lsof会列出所有进程打开的所有文件。(lsof -h 查看参数)

2、列出哪些进程使用某些文件
lsof /usr/xxx/1.log  

3、 递归查找某个目录中所有打开的文件 
lsof +D /usr/xxx/logs   
等价于: lsof | grep '/usr/xxx/logs'  

4、查找某个程序打开的所有文件
lsof -c httpd; 可逗号分隔多个进程名称,如lsof -c httpd,smbd  

5、 列出某个用户打开的所有文件  
lsof -u root 列出根用户使用的文件  
lsof -u root -c httpd 列出根用户运行的或者apache进程使用的所有文件     
lsof -a -u root -c httpd 列出根用户运行的且apache进程使用的文件  

6、 列出所有由某个PID对应的进程打开的文件    
lsof -p PID  

7、列出系统中开放端口及运行在端口上的服务的详细信息
lsof -i 列出所有打开了网络套接字(TCP和UDP)的进程  
lsof -i tcp 列出所有TCP网络连接  
lsof -i :port 使用某个端口的进程  

8、列出所有与某个描述符关联的文件
lsof -d 2 列出所有以描述符2打开的文件  
lsof -d 0-2 列出所有描述符为0,1,2的文件  
lsof -d mem 列出所有内存映射文件  
lsof -d txt 列出所有加载在内存中并正在执行的进程 
 
9、分析lsof -i 命令运行输出结果
  lsof 的每一项输出都对应着一个打开了特定端口的服务,输出的最后一列,如:tcp ip:port1->ip2:port (ESTABLISHED) ip1:port 对应本地机器和开放的端口,ip2:port 对应远程机器和开放的端口;
  若要列出本机当前开放的端口,可使用:
lsof -i | grep ":[0-9]\+->" -o | grep "[0-9]\+" -o | sort | uniq   
   注:root用户运行lsof命令



恢复删除的文件
当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。 
假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下: 
1,使用lsof来查看当前是否有进程打开/var/logmessages文件,如下: 
# lsof /var/log/messages
syslogd   1283      root    2w      REG        3,3  5381017    1773647 /var/log/messages (deleted)
从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。


2,在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下: 
# head -n 10 /proc/1283/fd/2
xxxx


3,恢复数据如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如: 
cat /proc/1283/fd/2 > /var/log/messages 
对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。

5,监控网络

5.1 netstat:查看端口占用【常用】

命令参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

常用命令:
列出所有端口 (包括监听和未监听的)
netstat -a

列出所有 tcp 端口 
netstat -at

列出所有 udp 端口 
netstat -au

只显示监听端口 
netstat -l

只列出所有监听 tcp 端口 
netstat -lt

只列出所有监听 udp 端口 
netstat -lu

只列出所有监听 UNIX 端口 
netstat -lx 

常用场景:
使用-nap或者  -nltp 
$netstat -nltp | grep httpd
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      6560/httpd
tcp        0      0 0.0.0.0:61085               0.0.0.0:*                   LISTEN      6613/httpd
$netstat -nltp | grep ":8080"
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      6560/httpd
$ps aux | grep -v grep | grep 6560
admin     6560  0.0  0.0 101468  2864 ?        S    12:44   0:00 /apsara/apache/bin/httpd -k restart

5.2 nslookup:查看dns??

nslookup root_server_ip_address

tcpdump

5.3 命令tcpdump:网络抓包分析工具??

tcpdump -i eth1 host 10.24.1.1 port 3001
http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

1)监听指定网卡(-i $interface)
tcpdump -i eth1
注:如果没有权限,则加上sudo
sudo tcpdump -i eth1
 
2)监听指定端口(加port xxx)
sudo tcpdump -i eth1 port 12345
 
3)监听指定端口的TCP请求(加tcp)
sudo tcpdump -i eth1 tcp port 12345
还可以监听其他协议,如ip,ip6,arp,tcp,udp等

4)监听指定IP(加host xxx.xxx.xx.xxx)
sudo tcpdump -i eth1 host 10.10.10.106
可以指定是源地址和目的地址src/dst
sudo tcpdump -i eth1 src host 10.10.10.106
sudo tcpdump -i eth1 dst host 10.10.10.106
如果要同时监听IP和端口,则要用and关键字
sudo tcpdump -i eth1 host 10.10.10.106 and port 80

5)展示详细信息(加-v -vv -vvv)
sudo tcpdump -i eth1 -v tcp port 12345
 
6)将请求信息保存到文件(加-w filename)
sudo tcpdump -w 20131218.pcap -i eth1 -v tcp port 12345

7)捉包时打印包数据到屏幕上(加-X)
sudo tcpdump -X -i eth1 -v tcp port 12345

8)指定捉包数据的长度(加-s $num)
sudo tcpdump -X -s 1024 -i eth1 -v tcp port 12345
(如果不指定,则会捉默认的96字节,太小了)
将长度加大后,可以展示更详细的数据

9)以ASCII方式显示数据包(加-A)方便查看数据
sudo tcpdump -A -X -s 1024 -i eth1 -v tcp port 80
(不过大部分服务器都gzip了,不一定能捉到明文数据)

10)捉取指定数量的包(加-c $num)
sudo tcpdump -A -X -s 1024 -i eth1 -v tcp -c 10 port 80

6 监控IPC(进程间通信)

6.1 命令ipcs:查看ipc status

取得ipc信息:

ipcs [-m|-q|-s]
-m     输出有关共享内存(shared memory)的信息
-q     输出有关信息队列(message queue)的信息
-s     输出有关信号量(semaphore)的信息

6.2 命令ipcrm:查看ipc remove

根据id删除:

ipcrm -m <id> 
ipcrm -q <id> 
ipcrm -s <id>

删除所有的>0的共享内存:

ipcs -m | grep $user | awk '$6>0 { print $2 }' | xargs ipcrm -m



7,调试命令

6.1 命令strace

xxx


strace
Logo

更多推荐