質問: 512mサーバーを起動すると、os(rhel)は、お気に入りのメモリレポートツール(top, cat /proc/meminfo | grep mem, free -mなど)を使用して、487mbが使用されていることを報告します。 javaプロセス(pid 123)を開始すると、約215mbの物理メモリが使用され(ps -f -p 123のresメモリで報告されています)、合計使用メモリが最大約700mbになります。 。1日中実行すると、プロセスのresメモリは少し変動しますが、通常は一貫しています。ただし、サーバーの合計メモリは約1500mbで着実に増加し、合計で2200mbになりました。私のjavaヒープサイズまたはpermgenヒープが大きくなっている場合、それはプロセスのresメモリに反映されませんか?また、私はその余分な1500mbをどこにも説明できないようです。# ps aux | awk '{ res+=$6 } end { printf("res: %.2fmb\n", res/1024) }' res: 722.23mb 誰かが私がその失われた記憶を見つけるのを手伝ってくれる?私は基本的に、これが私のアプリケーションの問題なのか、インフラストラクチャチームのサーバービルドの問題なのかを理解しようとしています。
回答: linuxは再利用のポリシーを使用しますが、最近使用したメモリを「本当に無料」としてマークしません(スクラブには手間がかかり、誰かが再び使用する場合に備えてものを残しておくと、費用がかからず、バンドルを節約できる可能性があります)。 「空きメモリ」レポートについて心配する必要はありません。使用されているスワップの量(ある場合)を確認します(スワップは基本的に、物理メモリを実際にオーバーフローさせるメモリ要件のためのディスクスペースです。ディスクは非常に遅いので、必要ありません)。パフォーマンスが心配な場合は、悪名高いsar( sysstat 、確かにシステム用のパッケージがあります)などの監視ソフトウェアをインストールして構成すると、後で確認できるように、何が起こっているかが詳細に記録されます。上記のレポートが手元にあれば、(もしあれば)あなたのボトルネックが何であるかがわかります。 「時期尚早の最適化はすべての悪の根源である」という言い回しは、人々が悪名高い実際のパフォーマンスの問題がどこにあるかを推測するのが苦手であり、「修正」を終了するためです。 「完全に正常に機能しているもの。