这里写自定义目录标题
- 一、正确终止进程:不要带尖括号
- 二、看清楚谁“真·吃”了内存
- 三、临时清掉缓存(谨慎用)
- 四、长期优化
- 1. 给系统加个 Swap
- 2. 调整 MySQL 内存配置
- 3. 水平/垂直扩容
- 4. 告警
- 总结与下一步
华为云的“内存使用率”默认是: used = total – free – buffers – cache usage% = used /
total × 100% 也就是说,系统为了加速 I/O
会把可用内存大量用作缓存(cache)和缓冲(buffers),在面板里都算作“已用”,而 ps/top 给出的 %MEM
则只算进程自己申请到的那部分。
一、正确终止进程:不要带尖括号
kill -9 <pid>
系统会把 <pid>
当成文字来解析,自然报“unexpected token”。
- 正确用法:
kill -9 1100 # 如果你要杀掉 PID=1100 的 mysqld
- 或者优雅一点,先试 SIGTERM(
-15
),实在不行再用-9
:
kill -15 1100
sleep 3
kill -9 1100
如果它是通过 systemd 管理的服务,更推荐:
systemctl restart mysqld
# 或者
systemctl stop mysqld && systemctl start mysqld
二、看清楚谁“真·吃”了内存
- 查看总体内存、缓存、Swap
free -h
- 输出示例:
total used free shared buff/cache available
Mem: 7.8G 6.2G 200M 120M 1.4G 1.1G
Swap: 2.0G 0.0G 2.0G
- buff/cache 就是被文件系统当缓存或缓冲用的,面板里算“已用”。
- available 是应用还能安全拿到的内存。
- 动态观察
watch -n2 free -h
- 或者装个
htop
:
sudo apt-get install -y htop
htop
三、临时清掉缓存(谨慎用)
如果确实想把「buff/cache」腾出来测试:
# 同步写回磁盘
sync
# 回收页缓存、目录项、inode
echo 3 | sudo tee /proc/sys/vm/drop_caches
注意:这只是临时清理,不会解决根本问题,且会让后续磁盘 I/O 变慢。
四、长期优化
1. 给系统加个 Swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
2. 调整 MySQL 内存配置
innodb_buffer_pool_size
:一般不超过物理内存的 60–70%。- 看看是否有过度缓冲。
3. 水平/垂直扩容
- 垂直:升级更大内存的实例规格。
- 水平:拆分服务,跑多个实例做负载均衡。
4. 告警
在华为云监控里对“内存使用率 ≥ 80%”设置告警,及时接到通知。
总结与下一步
用 free -h
/htop
看清「缓存」占用。
- 正确
kill PID
或systemctl restart mysqld
。 - 如果只是短期内存激增,可试
drop_caches
,长期还得调服务参数或加 swap/扩容。