システムの最初からメモリ消費を記録するためのすぐに使用できるソリューションはありますか?後で分析できるように、単純なテキストファイルまたはデータベースにデータを記録したいのですが。
私はLinux 2.4ベースの組み込みシステムに取り組んでいます。メモリ消費に関連する問題をデバッグする必要があります。私のアプリケーションは、システムが起動するたびに自動的に起動します。定期的に(可能な限り)タイムスタンプ付きのデータを取得する方法が必要なので、問題を追跡できます。
私の問題の症状:システムが起動すると、メインアプリケーションとGUIが起動し、システムの主なパラメーターが視覚化されました。 GTK +(Xサーバー)に基づくGUI。 GUIとXサーバーを無効にすると、アプリケーションは正常に動作します。 GUIとXサーバーを有効にすると、マザーボードに256 MiBまたは512 MiBの物理メモリがインストールされていると機能しません。 1 GiBメモリがインストールされている場合は、すべて問題ありません。
のような小さなスクリプト
rm memory.log
while true; do free >> memory.log; sleep 1; done
次のスクリプトは、タイムスタンプとヘッダーを出力します。
#!/bin/bash -e
echo " date time $(free -m | grep total | sed -E 's/^ (.*)/\1/g')"
while true; do
echo "$(date '+%Y-%m-%d %H:%M:%S') $(free -m | grep Mem: | sed 's/Mem://g')"
sleep 1
done
出力は次のようになります(Ubuntu 15.04、64ビットでテスト済み)。
date time total used free shared buffers cached
2015-08-01 13:57:27 24002 13283 10718 522 693 2308
2015-08-01 13:57:28 24002 13321 10680 522 693 2308
2015-08-01 13:57:29 24002 13355 10646 522 693 2308
2015-08-01 13:57:30 24002 13353 10648 522 693 2308
というプログラムがあります
sar
* nixシステム。これを使用してメモリ使用量を監視することができます。定期的に測定します。する
man sar
詳細については。オプションは、メモリ測定を行うための-r、-iで希望の間隔を指定することだと思います。
Crontabエントリを追加するだけで十分だと思います
*/5 * * * * free -m >> some_output_file
他にも SeaLion 、 New Relic 、 Server Density などのツールがありますが、ほとんど同じですが、インストールと構成がはるかに簡単です。私のお気に入りはSeaLionです。これは無料であり、一般的なLinuxコマンドの生の出力の素晴らしいタイムラインビューも提供します。
あなたは次のようなものを置くことができます
vmstat X >> mylogfile
起動スクリプトに。アプリケーションはすでに起動中であるため、アプリケーションがすでに使用している初期化スクリプトの最後にこの行を追加するだけで済みます。 (Xはログメッセージ間の秒数です)
私はすべてをログに記録することの大ファンであり、どのプロセスがメモリを使用しているか、および各プロセスが使用している量(および要約統計)を知っていると便利です。次のコマンドは、メモリ消費量の多い順に0.5秒ごとに上位の印刷出力を記録します。
top -bd0.5 -o +%MEM > memory.log
合計メモリ使用率の統計のみを保存する場合よりもログファイルの方がはるかに速く成長することに注意してください。ディスク領域が不足しないようにしてください。
だから私はこのゲームに遅れていることを知っていますが、私はこれを行う必要があるのでこの答えを思いついただけで、実際にはvmstat
、free
など...すべてが過剰なフィルタリングなしで出力されるように見えます。だからここに私が思いついた答えがあります:
top -bd 0.1 | grep 'KiB Mem' | cut -d' ' -f10 > memory.txt
または:
top -bd 0.1 | grep 'KiB Mem' | cut -d' ' -f10 | tee memory.txt
top
からの標準出力grep
の場合Kib Mem
は:
KiB Mem : 16047368 total, 8708172 free, 6015720 used, 1323476 buff/cache
これをcutで実行することにより、文字通りsedの前の数値のみに絞り込みます。
ユーザーは実際に0.1
別のキャプチャサンプルレートを実行するために別の数値に。私の場合、私はtop
を使用したかったのも、キャプチャごとに1秒より速くメモリ統計を実行できるためです。 1/10秒ごとの統計。
注:それはcut
を介したパイピングがMASSIVEを引き起こすことがわかりますファイルへの出力の遅延。後でわかったように、データ取得中にcut
コマンドを省略し、後で出力ファイルに対してカットコマンドを実行する方がはるかに高速です。また、テストではタイムスタンプは必要ありませんでした。
したがって、これは次のようになります。
Begin Logging:
top -bd 0.1 | grep 'KiB Mem' | tee memory_raw.txt
ログの終了:
ctrl-z (to exit logging)
フィルター:
2レベルのカット(フィルタリング)、最初はカンマ、次にスペース。これはtop
の配置によるもので、よりきれいな出力を提供します:
cut memory_raw -d',' -f3 | tee memory_used_withlabel.txt
cut memory_used_withlabel.txt -d' ' -f3 | tee memory_used.txt