這里寫自定義目錄標題
- 一、正確終止進程:不要帶尖括號
- 二、看清楚誰“真·吃”了內存
- 三、臨時清掉緩存(謹慎用)
- 四、長期優化
- 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/擴容。