op命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到现在的时间,因此,如果一个进程使用的cpu很少,那即使这个进程已经存在N长时间,TIME/TIME+也是很小的数值。
此外,如果你的系统有多个CPU,或者是多核CPU的话,那么,进程占用多个cpu的时间是累加的。
例如:257:14.655代表的时间是: 257分钟,14秒,0.655秒
看指定进程 top -p pid
看一批进程 top -p id1,id2,id3,id4
- CPU的使用率有以下几个指标
Cpu(s):
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
us + sy + ni + id = 100%
所以一般查看使用率的话,只要看100 - id的值就能得出当前的使用率
https://focusss.github.io/2019/02/10/Linux%E4%B8%ADbuff-cache%E5%8D%A0%E7%94%A8%E8%BF%87%E9%AB%98%E8%A7%A3%E5%86%B3%E6%89%8B%E6%AE%B5/
free -h
sar -r
top
显示的buff/cache
kbbuffers | 内核缓冲区(buffer)使用的内存数量,单位为 KB |
kbcached | 内核高速缓存(cache)数据使用的内存数量,单位为 KB |
- buff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
- cache(Page Cache)是一种高速缓存,用于CPU和内存之间的缓冲 ,是文件系统的cache。
把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。
其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
它们都是占用内存。两者都是RAM中的数据。简单来说,buff是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
目前进程正在实际被使用的内存的计算方式为used-buff/cache,通过释放buff/cache内存后,我们还可以使用的内存量free+buff/cache。
通常我们在频繁存取文件后,会导致buff/cache的占用量增高。
手动清除
# sync
# echo 1 > /proc/sys/vm/drop_caches
- sync:将所有未写的系统缓冲区写到磁盘中,包含已修改的i-node、已延迟的块I/O和读写映射文件
- echo 1 > /proc/sys/vm/drop_caches:清除page cache
- echo 2 > /proc/sys/vm/drop_caches:清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
- echo 3 > /proc/sys/vm/drop_caches:清除pagecache和slab分配器中的缓存对象。
/proc/sys/vm/drop_caches的值,默认为0 - 有时修改proc系统没用,就这样sysctl -w vm.drop_caches=3
- 按指定列排序
P 按CPU排序
M 按mem排序
自定义列排序: 大写F或者大写的O, 不同的linux版本不一样
上下左右键选择你需要排序的列, s键触发排序
R键用于在正序和逆序直接切换
E和e 用于切换内存显示的单位
c 显示命令的全路径
(16)最重要的F 可以选择排序列; 小f 可以选择当前显示的列有哪些:
(2)top -b
以批处理的方式运行。也就是刷新界面不是原地刷新,而是作为历史记录上移,这样可以将历史top信息保存起来便于查看变化过程。
S 表示进程当前的状态。S 值有下面几种:
D 不可中断的睡眠状态(uninterruptible sleep)
I idle 状态
R 进程在 running 队列中,正在运行或准备运行(running)
S 睡眠状态(sleeping)
T 停止状态(stopped by job control signal)
t 跟踪状态(stopped by debugger during trace)
Z 僵尸状态(zombie)
top 命令是有配置文件的,也就是说你通过命令修改的配置都可以保存下来。保存配置的命令为大写字母 W。
在你修改了 top 命令的配置后按下大写字母 W,然后退出 top 命令并再次执行 top 命令,此时你的修改仍然在起作用。
显示不全,可以用R来排序显示头部或者尾部
这里整理了几个优秀的top快捷键,一定会让你效率加倍。
1. 详细显示command
按下小写c : 详细显示command列
就是这样的效果,启动命令显示的非常全
不仅是程序的完整路径,连启动程序的参数都显示出来了
2. 过滤
o : 过滤进程
按下o后,会让你输入过滤条件
然后你可以输入,比如,我记得自己的进程有个core关键字
那就输入 COMMAND=core
回车
现在就只剩下模糊匹配core关键字的进程了
注意 COMMAND一定要大写,要和top的标题栏对应
再比如,过滤显示cpu使用率大于3的
注意:先按下=号,删除之前的过滤条件
再按o,填写过滤条件:%CPU>2.0
3. 只显示某个用户的进程
按下小写u,输入用户名
回车,就只剩下devops用户的进程了
4. 不要显示空闲进程
我们排查问题时,往往是想排查繁忙的进程,但是
打开top,会有下面一大堆的空闲进程显示着,有点干扰我们的视线。
只要按下i
直接过滤掉空闲进程
世界一下子清爽了。
5. 对某列进行排序
这也是个使用非常多的操作,比如对cpu或mem进行排序显示
- 大写M : 对内存进行排序显示
- 大写P:对cpu进行排序显示
- 大写T:对运行时间进行排序显示
- 大写N:对PID进行排序显示
以上排序,都是降序排列。想要反序的话,按下大写R
6. 再进一步,可以指定任意列进行排序
按下f
进入选择列的界面
选中某列,按下s确认。然后esc退出即可
有个小问题是,默认界面上看不出来是按哪一列进行的排序
按下小写xb可以加粗高亮显示排序列
htop命令更赞
- htop常用功能键
F1 : 查看htop使用说明 F2 : 设置 F3 : 搜索进程 F4 : 过滤器,按关键字搜索 F5 : 显示树形结构 F6 : 选择排序方式 F7 : 减少nice值,这样就可以提高对应进程的优先级 F8 : 增加nice值,这样可以降低对应进程的优先级 F9 : 杀掉选中的进程 F10 : 退出htop / : 搜索字符 h : 显示帮助 l :显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件 u :显示所有用户,并可以选择某一特定用户的进程 s : 将调用strace追踪进程的系统调用 t : 显示树形结构 H :显示/隐藏用户线程 I :倒转排序顺序 K :显示/隐藏内核线程 M :按内存占用排序 P :按CPU排序 T :按运行时间排序 上下键或PgUP, PgDn : 移动选中进程 左右键或Home, End : 移动列表 Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
按“F2”键,进入“Columns”,在“Available Columns”下添加PROCESSOR,按“F10”保存,每个进程当前使用的CPU ID将出现在CPU列中。