搬瓦工VPS磁碟IO優化與資料庫調優
更多語言
更多操作
在搬瓦工基礎款 VPS(1核 1G 內存)上跑 WordPress 或資料庫應用時,經常會遇到後台操作卡頓的問題。主要原因是 Debian 12 默認的磁碟調度策略和資料庫配置比較保守,沒有充分利用 SSD 和有限內存。下面以 1核1G 內存的 Debian 12 VPS 為例,一步一步演示怎麼優化。
- 重要提醒**:優化前一定要先打快照!如果操作後不滿意,可以隨時回滾。
一、操作前準備
1. 登錄 KiwiVM 面板。
2. 左側菜單找到 Snapshots
3. 點擊中間的 Create new snapshot 按鈕。
打完快照後,看到列表里多了一條新的記錄,狀態是 Completed。這說明快照已經正常拍攝了,如果優化過程中遇到什麼問題,可直接恢復快照。
二、調低 swappiness
Debian 12 默認 swappiness 是 60,系統比較喜歡用硬碟當內存。把它調低到 30,讓系統更願意用物理內存。
1.先備份配置文件:
bash sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
回車後終端直接回到提示符,沒有報錯就說明備份成功了。
2.臨時修改並驗證:
輸入下面命令並回車:
sudo sysctl -w vm.swappiness=30
會看到終端立刻輸出一行 vm.swappiness = 30,這說明臨時修改已經生效。
3.寫入永久配置:
依次輸入下面命令,每行輸入完後按回車:
sudo sed -i '/vm.swappiness/d' /etc/sysctl.conf
echo "vm.swappiness=30" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
最後一行輸出 vm.swappiness = 30 就代表永久生效成功。如果看到 eth1 報錯,直接忽略,不影響優化。
- 驗證**:輸入 cat /proc/sys/vm/swappiness,看到 30 就成功了。
三、優化 fstab 掛載參數
Linux 默認每次讀文件都要更新「最後訪問時間」,會產生很多無用寫操作。加上 noatime 和 lazytime 參數,讓系統少寫磁碟。
1.備份:
sudo cp /etc/fstab /etc/fstab.bak

2.編輯文件:
sudo nano /etc/fstab
修改前界面(注意看根目錄那一行): link=File:Io-6.png
在defaults後面加上 ,noatime,lazytime
3.保存退出:
先按Ctrl+O ,再按 回車 ,最後按 Ctrl+X,然後使修改生效:
sudo mount -o remount /
四、提升磁碟預讀值
1.查看主磁碟:
查看主磁碟(一般是 sda)
lsblk
從上面截圖中看到 sda 是 20G 的主磁碟。
2.設置預讀值:
# 设定预读值(把sda换成上面上查查看的主盘)
sudo blockdev --setra 2048 /dev/sda

3.寫入開機啟動:
- 啟動自動生效
echo "blockdev --setra 2048 /dev/sda" | sudo tee -a /etc/rc.local sudo chmod +x /etc/rc.local
五、MariaDB 簡單調優
1.備份配置文件:
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak ls -lh /etc/mysql/

2.編輯核心配置文件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

修改前界面

3.在 [mysqld] 下加入以下內容:
innodb_buffer_pool_size = 256M
innodb_flush_log_at_trx_commit = 1
修改後界面(注意看 [mysqld] 下方新增的參數):

4.重啟資料庫:
sudo systemctl restart mariadb
- 內存對照表**(根據實際內存調整):
- 1 GB 內存:推薦 256M -
2 GB 內存:推薦 512M–768M -
4 GB 及以上:推薦 1G 或物理內存的 50%
六、驗證效果 + 完整回滾
1.驗證效果:
sudo iotop -o
看 DISK READ/WRITE 數值是否明顯下降。
2.完整回滾:
優化時出現問題時可執行以下命令恢復默認配置
sudo cp /etc/sysctl.conf.bak /etc/sysctl.conf
sudo sysctl -p sudo cp /etc/fstab.bak /etc/fstab
sudo mount -o remount / sudo rm /etc/rc.local