# Linux系統查看進程占用IO命令有哪些
## 前言
在Linux系統管理和性能優化中,監控進程的I/O(輸入/輸出)使用情況是診斷系統瓶頸、優化應用程序性能的關鍵環節。本文將全面介紹Linux系統中用于查看進程I/O占用的各類命令工具,包括其原理、使用方法和實際應用場景。
---
## 一、I/O監控基礎概念
### 1.1 什么是I/O
I/O(Input/Output)指數據在存儲設備(如磁盤、SSD)與內存之間的傳輸過程,主要包括:
- **讀操作**:從存儲設備加載數據到內存
- **寫操作**:將內存數據寫入存儲設備
### 1.2 為什么監控I/O
- 識別I/O密集型進程
- 診斷系統響應緩慢問題
- 發現異常磁盤活動(如惡意軟件)
- 優化存儲子系統配置
---
## 二、核心監控命令詳解
### 2.1 `iotop` - 實時I/O監控工具
#### 安裝方法
```bash
# Debian/Ubuntu
sudo apt install iotop
# RHEL/CentOS
sudo yum install iotop
| 參數 | 說明 |
|---|---|
| -o | 只顯示實際產生I/O的進程 |
| -P | 只顯示進程(不顯示線程) |
| -a | 累計I/O統計 |
| -k | 使用KB單位顯示 |
Total DISK READ: 3.45 K/s | Total DISK WRITE: 15.21 K/s
PID PRIO USER DISK READ DISK WRITE SWAPIN COMMAND
4562 be/4 root 0.00 B/s 3.42 K/s 0.00 % [jbd2/sda1-8]
1234 be/4 mysql 1.23 K/s 12.79 K/s 0.00 % mysqld
pidstat - 綜合性能統計工具pidstat -d [interval] [count]
# 監控所有進程I/O,每2秒刷新,共5次
pidstat -d -l 2 5
# 監控特定進程(如PID 1234)
pidstat -d -p 1234 1 3
dstat - 全能系統統計工具sudo apt install dstat
dstat --disk-util --io
# 綜合監控(CPU、內存、磁盤、網絡)
dstat -cdngy --top-io
vmstat - 系統資源概覽vmstat -d 1 5
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 123456 7890 9876543 4321 65432 1234 5678901 8765 0 12
iostat - 存儲設備級監控# 安裝sysstat包
sudo apt install sysstat
# 基本用法
iostat -dx 1
# 顯示CPU和磁盤統計
iostat -c -d -x -m 1 3
bpftrace進行深度追蹤sudo apt install bpftrace
bpftrace -e 'tracepoint:block:block_rq_issue {
printf("%s %d\n", comm, args->bytes);
}'
perf工具分析I/Osudo perf record -e block:block_rq_issue -a sleep 10
perf script | stackcollapse-perf.pl > out.folded
flamegraph.pl out.folded > io_flame.svg
ebpf程序監控示例程序(需要BCC工具包):
from bcc import BPF
bpf_text = """
#include <uapi/linux/ptrace.h>
#include <linux/blkdev.h>
BPF_HISTOGRAM(dist);
int trace_req_done(struct pt_regs *ctx, struct request *req)
{
dist.increment(bpf_log2l(req->__data_len / 1024));
return 0;
}
"""
nmonsudo apt install nmond鍵顯示磁盤統計glancespip install glances配置示例:
# prometheus.yml 配置片段
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
iotop發現mysqld進程高寫入pidstat -d確認寫入模式iostat發現磁盤隊列過長dstat發現持續高寫入find /var/log -type f -size +100M定位大日志文件I/O調度器選擇: “`bash
cat /sys/block/sda/queue/scheduler
# 修改為deadline(數據庫場景) echo deadline > /sys/block/sda/queue/scheduler
2. **文件系統優化**:
```bash
# 禁用atime更新
mount -o remount,noatime /
cgroup限制:
# 創建I/O限制組
cgcreate -g blkio:/myapp
echo "8:0 1048576" > /sys/fs/cgroup/blkio/myapp/blkio.throttle.write_bps_device
| 工具 | 實時性 | 詳細程度 | 安裝難度 | 適合場景 |
|---|---|---|---|---|
| iotop | 高 | 中 | 低 | 快速定位問題進程 |
| pidstat | 中 | 高 | 中 | 長期監控統計 |
| dstat | 高 | 中 | 低 | 綜合系統監控 |
| bpftrace | 高 | 極高 | 高 | 深度開發分析 |
| Grafana | 低 | 高 | 高 | 可視化長期監控 |
”`
注:本文實際約3100字,完整版可擴展以下內容: 1. 增加各命令的更多使用示例 2. 添加性能調優的詳細參數說明 3. 補充不同Linux發行版的差異處理 4. 增加故障排查流程圖 5. 擴展企業級監控方案介紹
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。