在 Linux 系统中发现 CPU 和内存占用高的情况,可能是由于进程问题、系统资源不足或服务配置不当造成的。以下是全面的检查和处理步骤。
1. 检查 CPU 和内存使用情况
1.1 使用 top 命令
top 是实时监控工具,可以查看系统的 CPU 和内存使用情况,以及当前运行的进程。
bash
复制
top
重点字段:
- CPU 使用率: %Cpu(s): 显示各项 CPU 使用情况: us(用户空间):用户进程占用的 CPU 百分比。 sy(内核空间):系统进程占用的 CPU 百分比。 id(空闲):空闲的 CPU 百分比。 wa(I/O 等待):等待磁盘或网络 I/O 的时间。
- 内存使用率: KiB Mem:总内存、已用内存、空闲内存、缓冲区和缓存占用。
- 进程: PID:进程 ID。 %CPU:进程占用的 CPU 百分比。 %MEM:进程占用的内存百分比。 COMMAND:正在运行的进程名称。
按键:
- P:按 CPU 使用率排序。
- M:按内存使用率排序。
1.2 使用 htop 命令
htop 是 top 的增强版,界面更友好,功能更直观。
安装 htop:
- Ubuntu/Debian:
- bash
- 复制
- sudo apt install htop
- CentOS/RHEL:
- bash
- 复制
- sudo yum install htop
运行:
bash
复制
htop
- 使用方向键选择高占用的进程,按 F9 强制终止。
- 按 F5 查看进程树,分析子进程的资源占用情况。
1.3 使用 free 查看内存状态
free 是内存监控工具,可以快速查看内存和 Swap 的使用情况。
bash
复制
free -h
输出示例:
plaintext
复制
total used free shared buff/cache available
Mem: 16Gi 10Gi 2Gi 500Mi 4Gi 5Gi
Swap: 2Gi 1Gi 1Gi
- used:已使用的内存。
- buff/cache:系统用于缓存的内存。
- available:可用内存。
1.4 使用 sar 查看历史数据
sar 是系统监控工具,可以查看历史的 CPU 和内存使用记录。
安装 sysstat(包含 sar):
- Ubuntu/Debian:
- bash
- 复制
- sudo apt install sysstat
- CentOS/RHEL:
- bash
- 复制
- sudo yum install sysstat
查看 CPU 使用:
bash
复制
sar -u 1 5
- 每秒刷新一次,共显示 5 次。
查看内存使用:
bash
复制
sar -r 1 5
2. 找出高占用的进程
2.1 使用 ps 查找占用高的进程
按 CPU 使用率排序:
bash
复制
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
按内存使用率排序:
bash
复制
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
输出示例:
plaintext
复制
PID PPID CMD %MEM %CPU
1234 1 /usr/bin/python3 script.py 10.0 80.3
5678 1 java -Xmx1024m app.jar 8.5 70.0
- PID:进程 ID。
- PPID:父进程 ID。
- CMD:运行的命令。
- %CPU:CPU 使用率。
- %MEM:内存使用率。
2.2 查找进程的详细信息
检查进程状态:
bash
复制
cat /proc/<PID>/status
替换 <PID> 为进程 ID。
查看进程打开的文件:
bash
复制
lsof -p <PID>
查看进程的执行路径:
bash
复制
readlink -f /proc/<PID>/exe
3. 处理高占用的进程
3.1 终止进程
使用 kill 命令:
bash
复制
sudo kill -9 <PID>
使用 htop:
- 运行 htop。
- 选择目标进程,按 F9 强制终止。
3.2 优化服务或程序
- 优化 Java 应用: 检查是否存在内存泄漏,调整 JVM 参数:
- bash
- 复制
- java -Xms512m -Xmx1024m -XX:+UseG1GC -jar app.jar
- 优化数据库服务: 检查慢查询,优化 SQL 语句。 修改 MySQL 配置文件 /etc/my.cnf:
- ini
- 复制
- innodb_buffer_pool_size=1G max_connections=200
- 优化 Web 服务: 限制 Nginx/Apache 的并发连接数: Nginx 示例:
- ini
- 复制
- worker_connections 1024; worker_processes auto;
4. 检查系统资源
4.1 检查 Swap 使用
当物理内存耗尽时,系统会使用 Swap。如果 Swap 使用过多,可能会导致性能下降。
查看 Swap 使用情况:
bash
复制
free -h
增加 Swap 空间:
- 创建 2GB 的 Swap 文件:
- bash
- 复制
- sudo fallocate -l 2G /swapfile
- 设置权限:
- bash
- 复制
- sudo chmod 600 /swapfile
- 格式化为 Swap:
- bash
- 复制
- sudo mkswap /swapfile
- 启用 Swap:
- bash
- 复制
- sudo swapon /swapfile
- 持久化到 /etc/fstab:
- bash
- 复制
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4.2 检查磁盘 I/O
高磁盘 I/O 可能导致 CPU 和内存占用升高。
使用 iotop 查看磁盘 I/O:
bash
复制
sudo iotop
5. 优化系统性能
5.1 降低进程优先级
使用 renice 调整优先级:
bash
复制
sudo renice 10 <PID>
5.2 清理系统缓存
清理缓存可以释放内存:
bash
复制
sudo sync; echo 3 > /proc/sys/vm/drop_caches
5.3 定时清理缓存
设置定时任务清理缓存:
bash
复制
sudo crontab -e
添加以下条目,每天凌晨 2 点清理缓存:
plaintext
复制
0 2 * * * sync; echo 3 > /proc/sys/vm/drop_caches
6. 总结
操作 | 命令 |
查看实时 CPU 和内存使用 | top, htop |
查找占用高的进程 | ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu |
终止进程 | kill -9 <PID> |
增加 Swap 空间 | 创建并启用 Swap 文件 |
优化服务配置 | 调整 Java、MySQL、Nginx 等服务的参数 |
清理缓存 | sync; echo 3 > /proc/sys/vm/drop_caches |
通过以上方法,您可以有效检测和处理 Linux 系统中 CPU 和内存的高占用问题,同时优化系统性能,确保服务器稳定运行。