背景:CentOS 6 LAMPサーバーがあります。最近、サーバーは数日ごとに応答しなくなり始めました。最初にmysqldはnagios警告を発生させ、サーバーにSSHを接続することもできなかったので、ハードリセットが必要でした。 Mysqltunerがバッファプールを増やすように案内したのに役立ちました。これで、症状はapache httpダウンアラートを生成するnagiosに変更されました。今回はSSHでサーバーに接続できましたが、Apacheが再起動されなかったため、再起動する必要がありました。
/var/log/messages と /var/log/audit/audit.log を確認した後、何百ものAVCエラーが見つかりました。 audit.logは1日に数MBですが、他のサーバーのサイズはkbにすぎません。これは根本的な問題の手がかりになるのでしょうか?
一般的な/var/log/messagesエントリは次のとおりです。
Mar 31 16:50:39 web1 setroubleshoot: SELinux is preventing /bin/ps from getattr access on the directory /proc/<pid>. For complete SELinux messages. run sealert -l be51d126-d70e-491f-9ec8-f897677d9989
sealertの実行結果は次のとおりです。
SELinux is preventing /bin/ps from getattr access on the directory /proc/<pid>.
***** Plugin catchall (100. confidence) suggests ***************************
If you believe that ps should be allowed getattr access on the <pid> directory by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep ps /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
これは audit.log の一般的なエントリです。
type=SYSCALL msg=audit(1427837702.229:721164): arch=c000003e syscall=4 success=no exit=-13 a0=8164d0 a1=3eaee11cc0 a2=
3eaee11cc0 a3=8164d6 items=0 ppid=2792 pid=2800 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48
fsgid=48 tty=(none) ses=4294967295 comm="ps" exe="/bin/ps" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1427837702.219:721127): avc: denied { getattr } for pid=2800 comm="ps" path="/proc/875" dev=proc
ino=9349054 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=dir
修正する ところが数ヶ月後にまたそんなことが起こりました。私のLAMPサーバーが時々ハングする理由を理解していませんが(MySQLがNagios警告を発生させる最初のサービスであるため疑われます)、SE Linux警告(元の質問で)が発生する理由を知っています。ホスティングサイトはMagentoオンラインストアであり、5分ごとに実行されるcron.phpスクリプトは毎回SE Linuxエラーを引き起こします。
だから私が更新した質問は次のとおりです。私のメッセージと監査ログの多くの項目に加えて心配することはありますか?
答え1
ついに範囲を絞り込んで問題を解決できました。これは2つの問題の組み合わせです。
サーバーの Magento サイトは vhosts ファイルで無効になっています。ただし、Magento cronジョブは引き続き実行されており、失敗し、すべてのAVCエラーが発生します。孤立したクローンジョブを削除すると、AVCエラーを防ぐことができます。
しかし、Manuel Fauxがコメントで指摘したように、SELinuxのバグはサーバーのランダムなクラッシュとは関係ありません。しかし、AVCエントリはもはや私のログファイルを複雑にしないので、サーバーが停止する前にmysqlログに次のものが見つかりました。
InnoDB:警告:長いセマフォの待機: - スレッド140485795231488がbtr0sea.c行1706で241.00秒待機しました。セマフォ:btr0sea.c 178行目のファイルに生成された0x5583b18のRWラッチのXロックが作成されました。
セマフォ待ちのログを見て、これについて考えるようになりました。関連質問。したがって、最終的な解決策innodb_adaptive_hash_index = 0
はmysql設定で設定することです。
追加の手順ですべてのデータベースを最適化するために、毎週mysqlcheckも作成しました。 mysqlやSELinuxの自発的なクラッシュや奇妙なエラーログなしで数週間が経ちました。