如何解决CentOS系统卡顿
解决卡顿的第一步是明确瓶颈所在,需通过工具实时监控系统资源使用情况,常见工具及关注指标如下:
%us=用户空间占用、%sy=内核空间占用、%wa=I/O等待)、内存(used=已用、free=空闲、swap=交换分区使用)、进程(按M键按内存排序,按P键按CPU排序)的使用情况。若%wa持续高于10%,说明磁盘I/O是瓶颈;若%us或%sy过高,可能是应用或内核进程异常。vmstat 1 2(每秒采样1次,共2次)查看系统整体状态,重点关注procs中的r(运行队列长度,若大于CPU核心数说明CPU拥堵)、memory中的free(空闲内存,若为0说明内存紧张)、swap中的si/so(交换分区读写,若频繁说明内存不足)、io中的bi/bo(磁盘读写,若过高说明I/O瓶颈)。iostat -x 1 10查看磁盘I/O详细情况,重点关注sda(或其他磁盘设备)的%util(磁盘利用率,若接近100%说明磁盘满负荷运行)、await(平均I/O等待时间,若大于10ms说明磁盘响应慢)、r/s/w/s(读/写请求数,过高说明磁盘负载大)。vmstat、iostat、netstat等功能,通过dstat -cdngy(监控CPU、磁盘、网络、进程)实时查看多维度指标,输出更简洁直观。根据定位到的瓶颈,采取以下优化手段:
free -m显示used接近total且swap大量使用,需升级物理内存(如从4GB增至8GB以上);若无法升级,可通过调整swappiness参数(vim /etc/sysctl.conf,添加vm.swappiness=10,降低系统使用交换分区的频率)减少Swap使用,缓解内存压力。top中%us持续过高(如大于70%),需升级CPU(如从Intel Xeon E5-2670 v3升级至E5-2680 v4)或优化应用配置(如减少Apache的MaxRequestWorkers参数,降低并发请求数)。iostat中%util接近100%或await过高,需升级至SSD(如将HDD更换为NVMe SSD),或调整I/O调度器(机械盘用deadline,SSD用noop,修改/etc/default/grub中的GRUB_CMDLINE_LINUX,添加elevator=deadline,然后grub2-mkconfig -o /boot/grub2/grub.cfg更新配置)。top或htop找出占用资源高的进程(如%CPU或%MEM超过50%的进程),通过kill -9 <PID>终止异常进程(需确认进程用途,避免误杀系统关键进程)。systemctl list-unit-files --type=service列出所有服务,用systemctl disable <服务名>(如firewalld、NetworkManager)禁用非必要服务,减少后台资源消耗。swappiness设置为10(默认60),减少系统使用Swap的频率;修改/etc/sysctl.conf后,执行sysctl -p使配置生效。setenforce 0)测试是否缓解卡顿;若确认是SELinux问题,需通过audit2allow生成自定义策略,或永久关闭(修改/etc/selinux/config,设置SELINUX=disabled)。net.core.somaxconn(监听队列长度,默认128)至1024,增大net.ipv4.tcp_max_syn_backlog(SYN队列长度,默认1024)至2048),修改/etc/sysctl.conf后执行sysctl -p生效。fsck -y /dev/sdX(sdX为实际分区,如sda1)修复文件系统错误,需从Live CD启动或卸载分区后执行。badblocks -v /dev/sdX扫描磁盘坏道,若发现坏道需更换硬盘。/etc/fstab中为磁盘添加noatime(不更新访问时间)选项,减少磁盘写入次数(如/dev/sda1 / ext4 defaults,noatime 0 1),修改后执行mount -o remount /重新挂载。journalctl --vacuum-size=100M(限制日志大小为100MB)或rm -rf /var/log/*.gz(删除压缩的旧日志)清理日志,避免日志占满磁盘。sync; echo 3 > /proc/sys/vm/drop_caches(释放页缓存、目录项和inode缓存),或使用yum clean all(清理YUM缓存)、rm -rf ~/.cache/*(清理用户缓存)释放空间。/etc/sysctl.conf,添加net.ipv4.tcp_rmem = 4096 87380 6291456(接收缓冲区最小、默认、最大值)、net.ipv4.tcp_wmem = 4096 16384 4194304(发送缓冲区最小、默认、最大值),提高网络吞吐量。net.ipv4.tcp_tw_reuse = 1(允许重用TIME_WAIT状态的连接)、net.ipv4.tcp_tw_recycle = 1(快速回收TIME_WAIT连接),减少TIME_WAIT状态对端口资源的占用。iptables -L -n查看防火墙规则,删除不必要的规则(如允许所有入站流量的规则),减少防火墙对网络流量的检查开销。Netdata(sudo yum install epel-release && sudo yum install netdata && sudo systemctl start netdata)或Cacti搭建实时监控系统,及时发现资源异常。sudo dnf update --refresh更新系统和软件,修复已知bug和安全漏洞,提升系统稳定性。rm -rf /tmp/*)、日志文件和缓存,检查硬件状态(如硬盘SMART状态smartctl -a /dev/sda),确保硬件正常运行。