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

简介: 如何利用经典UNIX工具列出正在读写的进程并且排序之?

哪些进程这在对写?试试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:~#
相关文章
|
5天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
5天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2
|
5天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
22 3
|
8天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
25 6
|
8天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
33 6
|
9天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
37 5
|
9天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
4月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
4月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
166 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
3月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。