top命令–动态实时显示Linux系统进程 top命令相当于Windows下的任务管理器,能够实时显示系统进程情况,查看系统负载等信息。
1 2 3 4 5 6 7 8 9 10 11 12 $ top top - 16:22:05 up 44 days, 6:57, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.2 us, 0.0 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1016168 total, 171624 free, 133264 used, 711280 buff/cache KiB Swap: 0 total, 0 free, 0 used. 709152 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 125200 3372 2152 S 0.0 0.3 0:40.77 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.09 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:26.30 ksoftirqd/0 ...
第一行信息–系统时间及负载(同uptime
命令的执行结果) 1 2 3 4 5 6 top - 16:22:05 up 44 days, 6:57, 1 user, load average: 0.00, 0.01, 0.05 16:22:05 //当前系统时间 up 44 days, 6:57 //系统运行时间,格式为日,时,分。这里表示已经运行了44天又6小时57分钟。 1 user //当前登录的用户数 load average: 0.00, 0.01, 0.05 //系统负载,分别表示最近1分钟,5分钟,15分钟的平均负载值。
系统负载 :负载均值是基于内核的数量决定的,以100%负载计算 单核CPU,负载在0—1.00之间是正常的,超过1.00就是超负荷,理想值是0.7 多核CPU,负载值不应超过总核心数,CPU核心数 * 理想值0.7 = 理想负荷
例如一个双核CPU值为2.00则表示100%负载;4核CPU负载不超过2.8则表示没有出现高负荷(4*0.7=2.8)
在实际应用中,重点关注5分钟,15分钟的负载均值,当达到0.7时,就需要调查原因了。
第二行信息–系统进程数 1 2 3 Tasks: 65 total, 1 running, 64 sleeping, 0 stopped, 0 zombie 分别表示进程总数,正在运行的进程数,睡眠的进程数,已经停止的进程数,僵尸进程数
僵尸进程 :表示已经终止,但仍然保留一些信息的进程 僵尸进程无法使用kill清理,如果要手动清理僵尸进程,需要找到其父进程,kill掉父进程后,init进程将接管该僵尸进程(linux中所有的子进程都需要有父进程,当父进程被kill后,其所有子进程将过继给init进程),init进程隔一段时间去调用wait(),来清除僵尸进程
第三行信息–CPU信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 %Cpu(s): 6.2 us, 0.0 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st # 按`1`键展开或合并,可查看多个(或多核)CPU信息 6.2 us //用户空间占用CPU的百分比 0.0 sy //内核空间占用CPU的百分比 0.0 ni //用户进程空间内改变过优先级的进程占用CPU的百分比 93.8 id //空闲CPU百分比 0.0 wa //IO等待占用CPU的百分比 0.0 hi //硬中断占用CPU的百分比 0.0 si //软中断占用CPU的百分比 0.0 st //虚拟服务hypervisor占用百分比 # man帮助中的解释 us, user : time running un-niced user processes sy, system : time running kernel processes ni, nice : time running niced user processes id, idle : time spent in the kernel idle handler wa, IO-wait : time waiting for I/O completion hi : time spent servicing hardware interrupts si : time spent servicing software interrupts st : time stolen from this vm by the hypervisor
第四行信息–内存和swap交换分区 1 2 3 4 5 KiB Mem : 1016168 total, 171624 free, 133264 used, 711280 buff/cache KiB Swap: 0 total, 0 free, 0 used. 709152 avail Mem Mem内存:分别表示物理内存总量,空闲内存,已使用的内存,缓冲区和缓存区占用的内存 Swap交换分区:分别表示交换分区大小,空闲交换分区,已使用的交换分区,可用的内存
buff/cache buffers和cache都是内存中存放的数据,不同的是,buffers存放的是准备写入磁盘的数据,而cache存放的是从磁盘中读取的数据。在Linux系统中,守护进程(daemon)会定期把buffers中的数据写入的磁盘,也可以使用sync命令手动把buffers中的数据写入磁盘。使用buffers可以把分散的I/O操作集中起来,减少了磁盘寻道的时间和磁盘碎片。cache是Linux把读取频率高的数据,放到内存中以减少I/O,Linux中cache没有固定大小,根据使用情况自动增加或删除。
手动把buffers写入硬盘并清空cache
1 $ sync && echo 3 > /proc/sys/vm/drop_caches
Swap(内存交换区) 是硬盘上的一块空间。在内存不足的情况下,操作系统把内存中不用的数据存到硬盘的交换区,腾出内存来让别的程序运行。因此,开启swap会一定程度的引起 I/O 性能下降(阿里服务器默认不开)。
进程信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 125200 3372 2152 S 0.0 0.3 0:40.77 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.09 kthreadd 列名 含义 PID 进程id PPID 父进程id RUSER Real user name UID 进程所有者的用户id USER 进程所有者的用户名 GROUP 进程所有者的组名 TTY 启动进程的终端名。不是从终端启动的进程则显示为? PR 优先级 NI nice值。负值表示高优先级,正值表示低优先级 P 最后使用的CPU,仅在多CPU环境下有意义 %CPU 上次更新到现在的CPU时间占用百分比 TIME 进程使用的CPU时间总计,单位秒 TIME+ 进程使用的CPU时间总计,单位1/100秒 %MEM 进程使用的物理内存百分比 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES SWAP 进程使用的虚拟内存中,被换出的大小,单位kb RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA CODE 可执行代码占用的物理内存大小,单位kb DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb SHR 共享内存大小,单位kb nFLT 页面错误次数 nDRT 最后一次写入到现在,被修改过的页面数。 S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) COMMAND 进程名称(命令名/命令行) WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 Flags 任务标志,参考sched.h
关于 VIRT/RES/SHR 的详解区别 VIRT:virtual memory usage 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括swap out 2、包含其他进程的共享 3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 1、除了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来
DATA 1、数据占用的内存。如果top没有显示,按f键可以显示出来 2、真正的该程序要求的数据空间,是真正在运行中要使用的
自定义显示列 在top命令中按f
键可以查看显示的列信息,默认按%CPU
排序。可以通过上下方向键
选择,向右方向键
选择移动列,移动到合适位置后通过向左方向键
或回车
确定移动。space
空格键标记或取消选择列,按s
键设置当前项为默认排序列,q
或Esc
退出。
进程字段排序 b
键高亮显示运行状态的进程,默认会显示top进程,y
键关闭或打开高亮功能。x
键高亮显示排序列,默认%CPU
,通过shift + >
或shift + <
可以向右或向左改变排序列
灵活使用top 命令行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 常用参数: -b:以批处理模式操作,可以把top输出的内容以可读的形式写入文件,如top -n 3 -b >> top.txt -c:显示完整的命令行(COMMAND),想查看进程执行的具体位置时非常有用 -d:屏幕刷新间隔时间 -s:使用安全模式,即取消交互式命令 -S:指定累积模式 -i:不显示任何闲置或者僵死进程 -u<用户名>:指定用户名 -p<进程号>:指定进程 -n<次数>:指定循环显示的次数,到了次数自己退出 top -d 2 //每2秒刷新一次屏幕 top -c //显示进程的完整命令行参数(默认只有进程名) top -p 12345 -p 6789 //每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况 top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显示该进程启动的命令行参数
交互式 执行top命令,显示系统状态界面(同时也是交互界面),输入交互命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1:切换显示多核CPU信息 h:帮助信息 k:终止一个进程 i:忽略闲置和僵死进程,只显示正在运行的进程 q:退出程序 r:重新安排一个进程的优先级别 S:切换到累计模式 s:设置刷新时间间隔(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s l:切换显示平均负载和启动时间信息 m:切换显示内存信息 t:切换显示进程和CPU状态信息 c:切换显示命令名称和完整命令行 M:根据驻留内存大小进行排序 P:根据CPU使用百分比大小进行排序 T:根据时间/累计时间进行排序 W:将当前设置写入~/.toprc文件中,下次启动将自动调用toprc文件的设置
其他实用命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 如何通过 shell 脚本监控 top 命令并抓取某几个进程的信息? $ top -b -n 3 | grep -E "mysql | apache2" >> top.log # 如何用top只监视某个进程的状态?用pstree -p取得进程PID, 然后再监控 $ pstree -p | grep apache2 $ top -p 2038,13734,13735 # 监控java线程数 $ ps -eLf | grep java | wc -l # 监控网络客户连接数 $ netstat -n | grep tcp | grep 侦听端口 | wc -l # 获取某进程中运行中的线程数量(PID指的是进程ID) $ ls /proc/PID/task | wc -l
在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈pmap PID
htop–增强版的top htop 命令以直观的格式来显示信息 官网地址:http://hisham.hm/htop/
安装htop工具 Ubuntu:$ apt-get install -y htop
Fedora:$ dnf install htop
CentOS:$ yum install -y htop
源码包安装
1 2 3 4 $ tar zxvf htop-xxx.tar.gz $ cd htop-xxx $ ./configure $ make && make install
若出现错误:configure: error: You may want to use --disable-unicode or install libncursesw.
则需安装ncurses-devel
组件和dev开发包组
1 $ yum install ncurses-devel
RHEL/CentOS安装 需要安装epel源
1 2 3 $ rpm -ivh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm $ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL //导入key $ yum install -y htop
htop快捷键 F1
键显示帮助信息F2
或S
键编辑配置,可以自定义配置选项F3
或/
键搜索进程,搜索框在页面底部,如果匹配则会高亮显示该进程F4
键进程过滤器,搜索关键字,不区分大小写F5
或t
键切换树状视图,查看进程树F6
或<,>
键打开排序菜单,选择按哪一列排序,默认按CPU使用率排序F7
键或[
减少nice值,以提高对应进程的优先级F8
键或]
增加nice值,以降低对应进程的优先级F9
或k
键发送信号,选择进程,选择信号,回车键确定发送信号到指定进程F10
或q
键退出htop
Space
空格键标注或取消标记进程,高亮显示,快速定位指定进程。可以标记多个进程然后kill掉U
键取消标记所有进程F
键跟踪进程,即选定进程始终在屏幕上显示l
键显示选中进程所打开的文件列表I
键倒序排列u
键显示所有用户列表,选择显示指定用户进程P
按CPU%排序。M
按MEM%排序。T
按TIME排序
htop命令行选项 1 2 3 4 5 -C 使用单色显示 -d 设置刷新时间,单位秒。例如`htop -d 10`每10秒刷新一次 -u 显示指定用户的进程。例如`htop -u mysql`只显示用户名为mysql的相关进程 -p 显示指定的PID进程 -s 按指定列排序。例如`htop -s PID`按PID列的大小排序显示