私はそれが何をしているのかを知っています...私が継承したアプリケーションの問題を修正している理由が気になると思います。私は、かなりのサイズのTomcatアプリケーションを引き継ぎました。このアプリケーションは、多数のFlexクライアントのRed5サーバーとして機能し、リアルタイムの相互作用データの多くを処理します。これらのデータは、最終的にRails apiにフラッシュされます。これらのクライアントへの応答が3〜400ミリ秒に増加し、通常は100ミリ秒未満であったため、時間の経過とともに問題が大量に発生しました。クライアントは、私たちが実際には確認できないメモリの問題であると疑っていました。要求の取り込みを基本的に停止したか、非常に遅い負荷テストでした。
sync && echo 3 > /proc/sys/vm/drop_caches
そして魔法のようにサーバーは元の状態に戻り、これらの接続を提供するフルスピードで実行を開始しました。これは偶然でしたか、それともこの動作は理にかなっていますか?その理由は?
ハードディスクはRAMよりも桁違いに遅いので、Linuxはスペアを使用しますRAMファイルシステムデータをキャッシュするために浮動している可能性があります。ただし、これが実際に発生することはありません。ハードディスクに問題があるか、サーバーのサービスがデータをキャッシュまたは取得できないほど長い間、高速でデータを書き込もうとしています。ハードディスクがその寿命の終わり。
とにかく:
man sync
は、同期が何をするかを教えてくれます[フラッシュFSバッファ]command1 && command2
は、「command1が正常に終了してからcommand2を実行する場合」に分類されますcommand1 || command2
aka 'command1が失敗した場合、command2を実行する'あなたが与えられたコマンドは一時的な修正せいぜいであり、システムに何か他の問題があることを示しています。ディスクが寿命に達しているか、システムの能力が低すぎて、それを実行していないか、またはbothです。
AWSは気弱な人向けではなく、理由の1つに出会ったばかりです。 AWSでのディスクI/Oの状況が良くないことはよく知られており、その上にアプリケーションを構築する場合に考慮すべき主要な要素の1つです。問題を改善しようとすることができるディスク最適化されたインスタンスと他のいくつかのトリック(EBSボリュームからRAID 0を構築するなど)があります。カーネルがディスクI/Oを確実にバッファできるように、より大きなインスタンス(少なくともm1.large)を使用してください。