web-dev-qa-db-ja.com

Linuxでメモリ消費量をログに記録する方法は?

システムの最初からメモリ消費を記録するためのすぐに使用できるソリューションはありますか?後で分析できるように、単純なテキストファイルまたはデータベースにデータを記録したいのですが。

私はLinux 2.4ベースの組み込みシステムに取り組んでいます。メモリ消費に関連する問題をデバッグする必要があります。私のアプリケーションは、システムが起動するたびに自動的に起動します。定期的に(可能な限り)タイムスタンプ付きのデータを取得する方法が必要なので、問題を追跡できます。

私の問題の症状:システムが起動すると、メインアプリケーションとGUIが起動し、システムの主なパラメーターが視覚化されました。 GTK +(Xサーバー)に基づくGUI。 GUIとXサーバーを無効にすると、アプリケーションは正常に動作します。 GUIとXサーバーを有効にすると、マザーボードに256 MiBまたは512 MiBの物理メモリがインストールされていると機能しません。 1 GiBメモリがインストールされている場合は、すべて問題ありません。

38
bialix

のような小さなスクリプト

rm memory.log
while true; do free >> memory.log; sleep 1; done
32
Gunther Piez

次のスクリプトは、タイムスタンプとヘッダーを出力します。

#!/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
29
klaus se

というプログラムがあります

sar

* nixシステム。これを使用してメモリ使用量を監視することができます。定期的に測定します。する

man sar

詳細については。オプションは、メモリ測定を行うための-r、-iで希望の間隔を指定することだと思います。

5
Classified

Crontabエントリを追加するだけで十分だと思います

*/5 *  *  *  *  free -m >> some_output_file

他にも SeaLionNew RelicServer Density などのツールがありますが、ほとんど同じですが、インストールと構成がはるかに簡単です。私のお気に入りはSeaLionです。これは無料であり、一般的なLinuxコマンドの生の出力の素晴らしいタイムラインビューも提供します。

5
stylusbrook

あなたは次のようなものを置くことができます

vmstat X >> mylogfile

起動スクリプトに。アプリケーションはすでに起動中であるため、アプリケーションがすでに使用している初期化スクリプトの最後にこの行を追加するだけで済みます。 (Xはログメッセージ間の秒数です)

3
Steve B.

私はすべてをログに記録することの大ファンであり、どのプロセスがメモリを使用しているか、および各プロセスが使用している量(および要約統計)を知っていると便利です。次のコマンドは、メモリ消費量の多い順に0.5秒ごとに上位の印刷出力を記録します。

top -bd0.5 -o +%MEM > memory.log

合計メモリ使用率の統計のみを保存する場合よりもログファイルの方がはるかに速く成長することに注意してください。ディスク領域が不足しないようにしてください。

1
bob0007

だから私はこのゲームに遅れていることを知っていますが、私はこれを行う必要があるのでこの答えを思いついただけで、実際にはvmstatfreeなど...すべてが過剰なフィルタリングなしで出力されるように見えます。だからここに私が思いついた答えがあります:

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
0
trumpetlicks