Linux系统小技巧(5):如何列出和排序正在读写的进程?

哪些进程这在对写?试试iotop。但是有时候并不方便安装部署iotop,而且iotop的输出也容易进一步分析处理。

那么,有没有其他方式方便做到这一点呢?有。在说出答案前,我们先看看一个实际/proc/<pid>/io文件的内容

rchar: 951610978
wchar: 1180044763
syscr: 133011
syscw: 120643
read_bytes: 77246464
write_bytes: 735604736
cancelled_write_bytes: 98304

根据内核文档,rcharwchar即是进程已经提交但还没有完成的的读写操作要处理的内容。因此逐一遍历进程,即可计数正在读写的进程并且予以适当排序。

比如,列出正在发起读操作的前20个进程,我们可以这样办理

for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
  if [ -e /proc/${pid} ];then \
    num=$(cat /proc/${pid}/io | grep -E '^rchar:' | cut -d ' ' -f 2);\
    echo "${num} ${pid}";\
  fi;\
done | sort -n -r | head -20

当然,上面的命令稍加改动就可以用到正在写的进程上

for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
  if [ -e /proc/${pid} ];then \
    num=$(cat /proc/${pid}/io | grep -E '^wchar:' | cut -d ' ' -f 2);\
    echo "${num} ${pid}";\
    fi;\
done | sort -n -r | head -20

以上两个命令的执行示例如下

root@demo:~# for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
>   if [ -e /proc/${pid} ];then \
>     num=$(cat /proc/${pid}/io | grep -E '^rchar:' | cut -d ' ' -f 2);\
>     echo "${num} ${pid}";\
>   fi;\
> done | sort -n -r | head -20
28908475231 1
5022495635 1309
3647776277 906
1537484053 1806
1091171589 1388
955070588 31283
445533142 1458
325857806 920
148582179 893
75633008 9729
75169817 2068
74541144 2038
74355216 2067
73356682 2085
70308680 2073
50819715 1873
48753553 2080
48556521 1436
47121818 1709
41993240 29162
root@demo:~# for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
>   if [ -e /proc/${pid} ];then \
>     num=$(cat /proc/${pid}/io | grep -E '^wchar:' | cut -d ' ' -f 2);\
>     echo "${num} ${pid}";\
>     fi;\
> done | sort -n -r | head -20
1180115284 31283
502324828 1
488319291 906
94696438 1309
61642095 1458
41535896 893
39210225 29162
15680109 1359
9482873 2068
5626696 1756
5545914 1709
4047538 1677
2944955 478
2602756 19648
2065398 22388
2060970 22389
1816383 19644
1687956 1307
1548644 19647
1545858 19645
root@demo:~#
时间: 2024-12-07 03:35:24

Linux系统小技巧(5):如何列出和排序正在读写的进程?的相关文章

Linux系统小技巧(2):利用ps工具统计CPU消耗高的进程和统计消耗CPU或者内存的百分比

CPU消耗高往往是系统异常的一种表现.因为平常检查系统运行有哪些进程,都是使用ps工具.因此,出现这种情况时,如果能够通过ps工具搜寻出CPU消耗高的线程,则对进一步搜寻线索或者排查应该有帮助. 下面我们讨论两个相关的小技巧. 首先,我们得了解一下进程的概念.我们都很熟悉进程了,那么,线程是什么呢?引用Andrew S. Tanenbaum的话,就是 进程认为自己独占一台主机:线程认为自己独占一颗CPU. 所以,一个进程可能包含多个线程.但是考察CPU消耗问题,只考虑进程而不考虑线程是不够的.就

Linux系统小技巧(1):/dev/random设备可能导致java程序启动慢或者操作耗时不正常

致因 Linux系统上的设备/dev/random和/dev/urandom是不同的.这点可以使用下面的命令测试出来(执行会耗费几分钟时间,请有心理准备) for dev in /dev/random /dev/urandom;do echo "test ${dev}: " time dd if=${dev} bs=512 count=1 > /dev/null 2>&1 time dd if=${dev} bs=512 count=1 > /dev/null

Linux系统小技巧(6):刀锋组合-strace和wireshark工具

首先声明下,此处wireshark,可以替换为tcpdump.同样,strace偶尔也可以替换为ltrace,只要熟悉库函数就好. wireshark和strace,对于黑客而言,都是工具箱中的必备工具.有过排查和诊断经历的工程师,谁没有抓包和分析包的经历呢? 相对而言,strace的名气要小一些,毕竟有意愿.有能力追踪并且能够分析进程执行路径的不多.而且常见的系统调用也有二三十个. 系统调用如此强力,why? 让我们先明确下为什么strace工具颇具威力,看图 虽然Linux已经足够复杂,而且

Linux系统小技巧(4):环境变量JAVA_TOOL_OPTIONS简介

有关此环境变量的官方文档在此,本不用再饶舌,但是似乎不少人不知道这个变量及其文档.为传播计,还是记录一下. 首先,这个变量名字里虽然又"TOOL"字眼,但是,其角色却是"JAVA_OPTIONS".只不过因缘巧合,名不符实罢了. 平时见惯了有冲击力的java命令行.比如,这样的 当然,良好实践也是必不可少的,比如,Java VM Options You Should Always Use in Production. 但是,偶尔还是会有这样的情况,正如上面官方文档提

一些 Linux 桌面小技巧

我已经写过 Linux 提示和技巧 系列的一篇文章.写这篇文章的目的是让你知道这些小技巧可以有效地管理你的系统/服务器. 在Linux中创建 Cdrom ISO 镜像和监控用户 在这篇文章中,我们将看到如何使用 CD/DVD 驱动器中载入的碟片来创建 ISO 镜像:打开随机手册页学习:看到登录用户的详细情况和查看浏览器内存使用量,而所有这些完全使用本地工具/命令,无需任何第三方应用程序/组件.让我们开始吧-- 用 CD 碟片创建 ISO 映像 我们经常需要备份/复制 CD/DVD 的内容.如果你

老司机浅谈linux系统学习技巧

Linux 起源于 20 世纪 70 年代,是一种优秀的操作系统系统.初次接触到 linux 这个系统是在大学期间,这样才发现除了 windows 外的另外一个有趣系统.开始抱着好奇的心态去了解,随着深入学习,笔者被它独有的魅力所吸引.即使它的可视化窗口操作模式并不如 Windows 操作系统那样完美,可是它的可维护性.操作系统低占用率.可扩展性却让它在服务器操作系统方面已经成为资深服务器工程师的首选的操作工具. 笔者刚开始学习 linux 的时候,也不是一帆风顺的,下面笔者就开始分享这两年多的

12条实用 Windows 7系统小技巧

以下是从网上收集的12条实用 Windows7 小技巧,其实Win7的快捷键组合功能有很多,咱只学最最实用的.如果你也有同样的小技巧,就拿出来大家一起分享吧-- 一.Windows键 + 空格键"Space" [作用]:透明化所有窗口,快速查看桌面(并不切换) [快捷键]:win+空格 [小结]:当你打开了很多程序窗口的时候,这招非常有用,而且桌面还会有华丽的光影效果哦.没用过的赶紧试试先 二.Windows键 + D [作用]:最小化所有窗口,并切换到桌面,再次按又重新打开刚才的所有

php获取网卡的MAC地址支持WIN/LINUX系统_php技巧

复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; function GetMacAddr($os_type){ switch ( strtolower($os_type) ){ case "linux": $this->for

Win7系统小技巧 “凝固”的任务管理器

  大家都知道在任务管理器中可以实时监控系统资源信息,但也正式因为这个实时,导致各种进程信息上蹦下跳有时候看着实在是麻烦.下面系小编就为大家介绍一个Win7系统任务管理器使用技巧来解决这个问题. 首先我们打开任务管理器,点击内存小便签;这个时候我们按下"Ctrl"键,有木有发现整个任务管理器"凝固"了!这些一切信息都一目了然.