優れたソフトウェアと実用的なチュートリアル
Ubuntu の運用と保守でよくある落とし穴:「システムで開いているファイルが多すぎます!」
サーバーの動作が遅く、520または521エラーが頻繁に発生します。CPUとメモリの使用率は高くなく、ハードディスクの容量も十分ではありません。このような問題に遭遇すると、多くの人はPHPに問題があると考えます。しかし実際には、PHPのパフォーマンスに加えて、ファイルシステムのリソースが枯渇しているという重要な要因がもう一つあります。信じられないかもしれませんが、Ubuntuで開けるファイル数が上限を超えてしまったのです!
インターネットで調べてみると、同じような問題に遭遇している人がたくさんいることがわかりました!ここでは、この問題を素早く解決する方法をお教えします!
「システムで開いているファイルが多すぎます!" このエラーは Linux/Ubuntu システムでよく見られるリソース制限の問題で、サーバーのファイル記述子が枯渇し、新しい接続を開けないことを示しています。 CyberPanel や LiteSpeed 環境 (Web サーバーの HttpListener など) では、Nginx/Apache/MySQL などのプロセスが高トラフィック時にソケット/ファイルを開きすぎるため、「開いているファイルが多すぎます」というクラッシュが発生します。 CPU/メモリ/ハードディスクに異常はなく、ボトルネックとなっているのは記述子であることが確認されています (デフォルトのユーザー制限は 1024、グローバル制限は 65536)。 これにより、新しいリクエストが中断され、520/504 エラー率 50%+ が増幅されます。 幸いなことに、修正には ulimit と sysctl を調整するだけで済み、有効になるまで 5 ~ 10 分かかります。
「開いているファイルが多すぎます」エラーのトラブルシューティングと解決策: Ubuntu Server における開いているファイル数が多い問題の分析
Ubuntu/Linux サーバー管理において、「システムで開いているファイルが多すぎます!」というエラーは、リソース枯渇の典型的な兆候です。これは、システムのファイル記述子の上限に達し、新しいファイルやソケット接続が開けないことを示しています。ログには、ulimit -n = 65535(ユーザー/プロセス制限)と /proc/sys/fs/file-max = 65535(グローバルシステム制限)が表示されていますが、lsof | wc -l = 2211319(現在の開いているファイル数)は上限を大幅に超えています。これはハードウェアの問題(CPU/メモリ/ハードディスクは正常)ではなく、ファイルハンドルのリーク、または高同時実行アプリケーション(Web サーバーやデータベースなど)が接続を迅速に閉じられない状態が蓄積されていることが原因です。 Server FaultとAsk Ubuntuコミュニティによると、90%のようなケースは、Nginx/Apache/MySQLのプロセスハンドルが解放されず、ピーク時のトラフィックの急増につながり、502/504エラーやサービスクラッシュを引き起こすことが原因です。幸いなことに、この問題は、一時的または永続的に制限を引き上げ、プロセス診断を実施することで迅速に解決できます。
開いているファイルのトラブルシューティング: 誰が何を開いたか?
lsof ツール (すでにインストール済み) を使用して、プロセス/タイプ別に診断します。
lsof | wc -l
プロセスごとに開いているファイルの数を表示します(原因を見つけるため)。
lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head -10 #は上位10個のプロセスをリストします
リアルタイム監視: watch -n 5 'lsof | wc -l' 5 秒ごとに更新して増加を観察します。
システムのデフォルトの最大ファイル クォータは 65535 です。開いているファイルの数が 65535 を超えると、開いているファイルはすべてキューに入れる必要があり、アクセス操作が遅くなります。
解決策: 制限を引き上げ、根本原因を修正する
/etc/security/limits.confファイルを編集してクォータを増やす
sudo vi /etc/security/limits.conf
一番下までスクロールして、65535をすべて4194304に変更します。
次に/etc/sysctl.confファイルを編集します。
/etc/sysctl.conf を vi で開きます。
fs.file-max パラメータを変更します。
fs.file-max = 4194304
アプリケーションプロファイル:
sudo sysctl -p
すべての設定が完了したら、sudo reboot で再起動します。
再起動したら速度が上がりました!