相关命令:who/w/ps/top
转载自:http://www.51testing.com/html/32/n-823532.html
1、top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
内容解释:
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
常用的命令:
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
2、/proc/pid
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息
说明:
/proc/N pid为N的进程信息
/proc/N/cmdline 进程启动命令
/proc/N/cwd 链接到进程当前工作目录
/proc/N/environ 进程环境变量列表
/proc/N/exe 链接到进程的执行命令文件
/proc/N/fd 包含进程相关的所有的文件描述符
/proc/N/maps 与进程相关的内存映射信息
/proc/N/mem 指代进程持有的内存,不可读
/proc/N/root 链接到进程的根目录
/proc/N/stat 进程的状态
/proc/N/statm 进程使用的内存的状态
/proc/N/status 进程状态信息,比stat/statm更具可读性
/proc/self 链接到当前正在运行的进程
3、pmap
pmap命令可以显示一个或多个进程所使用的内存数量。你可以使用这个工具来了解服务器上的某个进程分配了多少内存,并以此来判断这是否是导致内存瓶颈的原因。要得到更加详细的信息,使用pmap
-d选项。
查看Linux进程占用的资源
查看Linux系统下某一个进程占用的资源是进行系统调测的关键。它不仅涉及到健壮性,也涉及到程序的调优。尤其是对于那些需要长时间在内存中运行的程序,如果发生随着外部运行环境的变化而导致的资源占用的不当起伏,势必导致程序运行的潜在风险。
top
top是灵活的CPU状态的查看工具,类似任务管理器。Top命令一般分成两部分进行显示,第一部分是当前系统的运行概况:
第一行(top):top - 17:03:45 up 58 days, 4:01, 1 user, load average:
0.00, 0.02, 0.00
“17:03:45”为系统当前时刻; “58
days, 4:01”为系统启动后到现在的运作时间; “1
user”为当前登录到系统的用户,更确切的说是登录到用户的终端数--同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “load
average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU数目时,CPU将比较吃力的负载当前系统所包含的进程;第二行(Tasks): “172
total”为当前系统进程总数; “1
running”为当前运行中的进程数; “171
sleeping”为当前处于等待状态中的进程数; “0
stoped”为被停止的系统进程数; “0
zombie”为僵死的进程数;第三行(Cpus): 显示CPU利用率的详细信息,如果有多个CPU,屏幕将在每行显示一个CPU的信息。第四行(Mem): 显示可用的和已利用的内存第五行(Swap): 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
其余的显示内容以表格格式显示进程。下面对各列进行解释:各个不同的列的内容为:
PID 进程的进程ID
USER 运行该进程的用户PRI 进程的优先级NI nice值:该值越高,任务的优先级越低SIZE
该进程使用的内存(代码+数据+堆栈)VIRT:virtual memory usage
RSS 该进程使用的物理内存SHARE 该进程使用的共享内存STAT 该进程的状态,用代码显示。一些主要的状态代码包括:R— 正在运行S— 正在休眠Z— 迟滞T— 已停止您还会看到第二个和第三个字符,它们表示:W— 已换出的进程N— 正nice值%CPU
该进程使用的CPU百分比%MEM
该进程使用的内存百分比TIME
该进程使用的总CPU时间CPU
如果这是一个多处理器系统,该列指明正在其上运行进程的CPU的ID。COMMAND 该进程发出的命令top运行中可以通过top的内部命令对进程的显示方式进行控制。内部命令如下: s -改变画面更新频率 l
-关闭或开启第一部分第一行top信息的表示 t
-关闭或开启第一部分第二行Tasks和第三行Cpus信息的表示 m
-关闭或开启第一部分第四行Mem和第五行Swap信息的表示 N
-以PID的大小的顺序排列表示进程列表P
-以CPU占用率大小的顺序排列进程列表 M
-以内存占用率大小的顺序排列进程列表 h
-显示帮助 n
-设置在进程列表所显示进程的数量 q
-退出top
pmap
pmap用于查看一个进程所占用的内存的情况,在现实上,几个主要列的含义是:
Address:00378000-0038d000 进程所占的地址空间Kbytes 该虚拟段的大小RSS 设备号(主设备:次设备)Anon 设备的节点号,0表示没有节点与内存相对应Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared,
p=private(copy on write)
Mapping: bash 对应的映像文件名
使用的基本方法是“pmap + 命令行模式
+ pid”实现对于单一进程的内存监测
查看/proc/process_id下的内容
/proc/pid/status
包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
[root@localhost ~]# cat
/proc/self/status
Name: cat
State: R (running)
SleepAVG: 88%
Tgid: 5783
Pid: 5783
PPid: 5742
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6
10
VmSize: 6588 kB
VmLck: 0 kB
VmRSS: 400 kB
VmData: 144 kB
VmStk: 2040 kB
VmExe: 14 kB
VmLib: 1250 kB
StaBrk: 0804e000 kB
Brk: 088df000 kB
StaStk: bfe03270 kB
ExecLim: 0804c000
Threads: 1
SigPnd:
0000000000000000
ShdPnd:
0000000000000000
SigBlk:
0000000000000000
SigIgn:
0000000000000000
SigCgt:
0000000000000000
CapInh:
0000000000000000
CapPrm:
00000000fffffeff
CapEff:
00000000fffffeff
输出解释
Name 应用程序或命令的名字
State
任务的状态,运行/睡眠/僵死/
SleepAVG
任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的
sleep_avg 也会相应地更大一些,所以计算出来的优先级也会相应高一些。
Tgid 线程组号
Pid
任务ID
Ppid
父进程ID
TracerPid
接收跟踪该进程信息的进程的ID号
Uid Uid euid suid
fsuid
Gid Gid egid sgid
fsgid
FDSize
文件描述符的最大个数,file->fds
Groups
VmSize(KB) 任务虚拟地址空间的大小
(total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页
VmLck(KB)
任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
VmRSS(KB)
应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值
(rss)
VmData(KB)
程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据;
(total_vm-shared_vm-stack_vm)
VmStk(KB) 任务在用户态的栈的大小
(stack_vm)
VmExe(KB)
程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库
(end_code-start_code)
VmLib(KB)
被映像到任务的虚拟内存空间的库的大小 (exec_lib)
VmPTE
该进程的所有页表的大小,单位:kb
Threads
共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。
SigQ 待处理信号的个数
SigPnd
屏蔽位,存储了该线程的待处理信号
ShdPnd
屏蔽位,存储了该线程组的待处理信号
SigBlk 存放被阻塞的信号
SigIgn 存放被忽略的信号
SigCgt 存放被俘获到的信号
CapInh
Inheritable,能被当前进程执行的程序的继承的能力
CapPrm
Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性
CapEff
Effective,进程的有效能力
范例 1可
以看出该应用程序的正文段(1KB)很小,说明代码很少,是依靠库(1251KB)来执行。栈(138KB)适中,说明没有太多许多嵌套函数或特别多的临
时变量。VmLck为0说明进程没有锁住任何页。VmRSS表示当前进程使用的物理内存为2956KB。当进程开始使用已经申请的但还没有用的内存
时,VmRSS的值开始增大,但是VmSize保持不变。
[root@localhost 1]# cat
/proc/4668/status
Name: gam_server
State: S (sleeping)
SleepAVG: 88%
Tgid: 31999
Pid: 31999
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6
10
VmSize: 2136 kB
VmLck: 0 kB
VmRSS: 920 kB
VmData: 148 kB
VmStk: 88 kB
VmExe: 44 kB
VmLib: 1820 kB
VmPTE: 20 kB
Threads: 1
SigQ: 1/2047
SigPnd:
0000000000000000
ShdPnd:
0000000000000000
SigBlk:
0000000000000000
SigIgn:
0000000000001006
SigCgt:
0000000210000800
CapInh:
0000000000000000
CapPrm:
00000000fffffeff
CapEff:
00000000fffffeff
Oprofile
文献:
sysstate
(分析应用)