Linux系统跑CPU和内存的检查处理办法

在 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:

  1. 运行 htop。
  2. 选择目标进程,按 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 空间:

  1. 创建 2GB 的 Swap 文件:
  2. bash
  3. 复制
  4. sudo fallocate -l 2G /swapfile
  5. 设置权限:
  6. bash
  7. 复制
  8. sudo chmod 600 /swapfile
  9. 格式化为 Swap:
  10. bash
  11. 复制
  12. sudo mkswap /swapfile
  13. 启用 Swap:
  14. bash
  15. 复制
  16. sudo swapon /swapfile
  17. 持久化到 /etc/fstab:
  18. bash
  19. 复制
  20. 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 和内存的高占用问题,同时优化系统性能,确保服务器稳定运行。

原文链接:,转发请注明来源!