AWS EC2マイクロインスタンスでウェブサーバーを実行しています。インスタンスのRAMは最大630MBです。時間の経過とともに、いくつかのhttpdプロセスがあり、空きRAMはほとんどありません。 httpdサービスを再起動すると、約350MBのRAMが解放されます。
Rootの下でcronジョブを使用して、これを12時間ごとに自動化することを考えました。私のスクリプトには次のコードが含まれています
service httpd restart
service mysqld restart
ps aux
free -m
私がcronスクリプトを試すのはこれが初めてです。
ps aux
およびfree -m
の予想される出力が記載された電子メールを受信しましたが、
./scriptName.sh: line 1: service: command not found
./scriptName.sh: line 2: service: command not found
再起動コマンド用。
スクリプトはルートとして実行されました。 Sudo
を使用すると、スクリプトがハングする可能性があります。 ps
の出力からの関連する行-
root 14664 0.0 0.2 142200 1720 ? S 22:41 0:00 CROND
root 14665 0.0 0.2 9296 1236 ? Ss 22:41 0:00 /bin/sh -c ./scriptName.sh
smmsp 14667 0.0 0.6 76020 4244 ? R 22:41 0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root
root 14669 0.0 0.1 11244 1008 ? R 22:41 0:00 ps aux
サービスを正常に再開するために正しいことは何ですか?
このようなことをすることもお勧めですか?
free -m
の出力
total used free shared buffers cached
Mem: 596 573 23 0 8 71
-/+ buffers/cache: 493 103
Swap: 0 0 0
主な問題は、cronの実行環境で適切な$PATH
が定義されていないため、これを機能させるにはservice
への完全パスを使用する必要があることです。
このパスは、which service
のようなものを出力するコマンド/usr/sbin/service
で確認できます。
二次的な問題:私はそれをしません、本番システムでサービスを盲目的に再起動することは決して良い考えではありません。あなたは実際のメモリ/パフォーマンスの問題を抱えていますか、それともあなたのRAMはバッファなどで使い果たされているだけかもしれません( http://www.linuxatemyram.com/ )?
数時間後のfree -m
の出力を質問に追加してください。
自作のcronスクリプトを実行するのではなく、Monitのようなものを見る方がよい場合があります。
Apacheの設定例は次のとおりです。
http://mmonit.com/wiki/Monit/ConfigurationExamples#Apache
あなたは次のようなことができるはずです:
if totalmem > 300 MB for 2 cycles then alert
apacheブロックで。
MonitはRPMリポジトリの1つにある必要があります。
あなたはこれを間違った方法で行っていると思います。まず、Apacheのチューニングを調べてください。次に、Linuxのメモリ管理について調べます。 RAMを使用してサーバーが欲しいのですが、それ以外の理由は何ですか?
なぜRAMを解放したいのですか? free ramは無駄なRAMです。キャッシュメモリを空きRAMとして数えないことにより、空きRAMの量を誤って計算している( linuxatemyram.com を参照)か、Apacheが使用するメモリが少なくなるように、少数のMaxClientsに対してApacheを調整する必要があります。