Linuxサーバーを長期間安定して運用するためには、性能チューニングとリソース監視が不可欠です。本記事では、Linuxサーバーのボトルネックを解消するための基本的なチューニング方法と、日常的な監視を自動化するスクリプトの作成方法を解説します。
1. 性能チューニングの基本方針
Linuxサーバーのパフォーマンスを最適化するには、以下の観点から調整を行います。
- CPU使用率: プロセスの負荷分散、不要なサービス停止
- メモリ管理: スワップの最適化、キャッシュ利用の確認
- ディスクI/O: ファイルシステムチューニング、I/Oスケジューラ調整
- ネットワーク: TCP設定、同時接続数の調整
まずは現在の状況を把握することが第一歩です。
2. 性能監視に役立つコマンド
Linux標準のコマンドを活用して、リソース状況を定期的に確認しましょう。
CPUとメモリ
uptime # 負荷平均を確認
vmstat 5 # メモリ・CPUの状況を5秒ごとに確認
top # プロセス単位でのリソース利用
ディスクI/O
iostat -x 5 # ディスクI/Oの詳細
sar -d 5 # I/O統計
ネットワーク
netstat -tunapl # 接続状況確認
ss -s # ソケット統計
3. チューニングの具体例
(1) スワップの使用を抑制
スワップが過剰に使われると応答が遅くなります。
# スワップの利用傾向を確認
free -h
# スワップ抑制設定(値が小さいほどスワップを使わない)
sudo sysctl vm.swappiness=10
(2) ファイルディスクリプタ数の増加
同時接続が多いサーバーでは制限緩和が必要です。
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
(3) ネットワークのTCP設定
大量接続が発生する場合のチューニング例です。
sudo sysctl -w net.core.somaxconn=1024
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
4. 監視スクリプトの作成
日常的にCPU・メモリ・ディスクの使用状況をチェックし、閾値を超えたらアラートを出すシンプルな監視スクリプトを作成してみましょう。
監視スクリプト例(monitor.sh)
#!/bin/bash
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=80
# CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')
# メモリ使用率
MEM_USAGE=$(free | awk '/Mem/ {printf("%.0f", $3/$2 * 100.0)}')
# ディスク使用率(/ パーティション)
DISK_USAGE=$(df -h / | awk 'NR==2 {gsub("%", "", $5); print $5}')
ALERT=""
if [ $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc) -eq 1 ]; then
ALERT+="CPU usage is high: ${CPU_USAGE}%\n"
fi
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
ALERT+="Memory usage is high: ${MEM_USAGE}%\n"
fi
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
ALERT+="Disk usage is high: ${DISK_USAGE}%\n"
fi
if [ -n "$ALERT" ]; then
echo -e "[ALERT]\n$ALERT" | mail -s "Server Alert" admin@example.com
else
echo "System resources are normal."
fi
実行権限を付与して、cronに登録すれば定期監視が可能です。
chmod +x monitor.sh
crontab -e
# 5分ごとに監視
*/5 * * * * /path/to/monitor.sh
5. まとめ
- Linuxサーバーの安定稼働にはチューニングと監視が両輪
- ボトルネックの把握には
top
やiostat
などの標準コマンドが有効 - スワップ、ファイルディスクリプタ、TCP設定などで性能改善
- シェルスクリプトで監視を自動化すれば管理コストを削減
本記事の内容を参考に、あなたのLinuxサーバー環境に合わせたチューニングと監視を実践してみてください。