Linux查看进程和线程的CPU使用率、内存占用情况(找出那个捣蛋鬼)

本文介绍了Linux系统中用于监控CPU、内存使用情况以及IO和进程状态的常用命令,如`ps`、`free`、`top`和`vmstat`。这些工具能够帮助管理员了解系统资源的占用情况,定位高负载问题,从而进行性能优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 查看 cpu 占用率高的线程
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu

例如
在这里插入图片描述
2. 查看占用内存最多的程序

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
  1. 查看占用cpu最多的程序
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
  1. Free命令

查看总内存、使用、空闲等情况。

字段说明:

  • total:总计物理内存的大小
  • used:已使用多大
  • free:可用有多少
  • shared:多个进程共享的内存总额
  • buffers/cached:磁盘缓存的大小
    在这里插入图片描述
  1. Top命令

Top命令很常用,在第三行有显示CPU当前的使用情况。

字段说明:

  • PID:进程标示号
  • USER:进程所有者
  • PR:进程优先级
  • NI:进程优先级别数值
  • VIRT:进程占用的虚拟内存值
  • RES:进程占用的物理内存值
  • SHR :进程使用的共享内存值
  • S :进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死
  • %CPU :进程占用的CPU使用率
  • %MEM :进程占用的物理内存百分比
  • TIME+:进程启动后占用的总的CPU时间
  • Command:进程启动的启动命令名称
    在这里插入图片描述
  1. Vmstat命令

查看CPU使用率、内存使用、IO读写情况,输入命令 vmstat:

字段说明:

Procs(进程):

  • r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
  • b: 等待IO的进程数量

Memory(内存):

  • swpd: 使用虚拟内存大小
  • free: 空闲物理内存大小
  • buff: 用作缓冲的内存大小
  • cache: 用作缓存的内存大小

Swap:

  • si: 每秒从交换区写到内存的大小,由磁盘调入内存
  • so: 每秒写入交换区的内存大小,由内存调入磁盘

IO:

  • bi: 每秒读取的块数
  • bo: 每秒写入的块数

系统:

  • in: 每秒中断数,包括时钟中断。
  • cs: 每秒上下文切换数。

CPU(以百分比表示):

  • us: 用户进程执行时间百分比(user time)
  • sy: 内核系统进程执行时间百分比(system time)
  • wa: IO等待时间百分比
  • id: 空闲时间百分比
    在这里插入图片描述
### Linux 中多路复用与多路转换的技术原理 #### 一、多路复用技术概述 多路复用是一种允许单线程管理多个文件描述符(FDs)的技术,在 Linux 系统中主要通过 `select`、`poll` `epoll` 来实现。这些机制的核心在于让程序能够监听多个 FD 的状态变化,而无需为每个连接创建独立的线程进程。 - **Select 函数** 使用 `select` 可以监控一组文件描述符的状态,当其中任意一个变为可读、可写或者发生错误时通知应用程序[^1]。然而,由于其设计上的局限性(如固定大小的集合 O(n) 时间复杂度),它并不适合高并发场景。 - **Poll 函数** 类似于 `select`,但是解决了部分性能瓶颈问题,比如不再依赖固定的数组结构来存储文件描述符列表[^2]。尽管如此,它的效率仍然受限于每次都需要遍历整个事件队列。 - **Epoll 接口** 这是一个更为高效的 API 集合,专门用于处理大量并发连接的情况。相比前两者而言,`epoll` 提供了基于事件驱动的通知模型以及更灵活的操作接口,例如通过 `epoll_ctl()` 动态增删监视目标[^4]。 #### 二、多路转换概念解释 所谓“多路转换”,通常指的是在网络通信领域内的一种数据交换方式——即把来自不同源的数据包按照一定规则重新定向到指定的目的地址上。这种功能可以由硬件设备完成(如路由器),也可以借助软件层面实现。 具体来说,在操作系统内部可能涉及到如下几个方面: - 文件输入输出操作中的通道(Channel)切换; - TCP/IP协议栈里针对各个套接字(Socket)实例间的消息路由决策过程等等[^3]. 值得注意的是,“多路复用”侧重于提高资源利用率并简化编程逻辑;而所谓的 “多路转换” 更加关注如何有效地分配流量至恰当的服务端点之上。 #### 三、应用场景对比分析 | 特性/类别 | 多路复用 | 多路转换 | |------------------|---------------------------------------|------------------------------------| | 主要解决的问题 | 同一线程高效管理多个I/O请求 | 数据分发给正确的服务组件 | | 关键代表技术 | select,poll,epoll | 负载均衡器,LVS,NAT | | 性能影响因素 | 描述符数量,系统调用开销 | 规则匹配算法复杂度,缓存策略 | | 典型应用案例 | Web服务器保持长连接 | CDN边缘节点转发用户访问 | 综上所述,虽然二者名称相近且都涉及到了对多种信道的同时操控能力,但实际上它们各自面向的需求存在显著差异,并且所采用的具体手段也有很大区别。 ```python import selectors sel = selectors.DefaultSelector() def accept(sock, mask): conn, addr = sock.accept() sel.register(conn, selectors.EVENT_READ) sock = socket.socket() sock.bind(('localhost', 1234)) sock.listen() sel.register(sock, selectors.EVENT_ACCEPT) while True: events = sel.select() for key, mask in events: callback = key.data callback(key.fileobj, mask) ``` 上述代码片段展示了利用 Python 的标准库模块 `selectors` 实现了一个简单的基于回调函数的非阻塞 I/O 循环框架,这正是现代异步编程实践的一个典型例子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值