56

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

Linux2.4ベースの組み込みシステムに取り組んでいます。メモリ消費に関連する問題をデバッグする必要があります。私のアプリケーションは、システムが起動するたびに自動的に起動します。問題を追跡できるように、定期的な間隔(できるだけ頻繁に)からタイムスタンプ付きのデータを取得する方法が必要です。

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

4

8 に答える 8

35

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

rm memory.log
while true; do free >> memory.log; sleep 1; done
于 2009-12-08T16:46:42.350 に答える
6

私はすべてをログに記録するのが大好きで、どのプロセスがメモリを使用しているか、各プロセスがどれだけ使用しているか (および要約統計) を知ることが役立つと思います。次のコマンドは、0.5 秒ごとにメモリ消費量順に上位の出力を記録します。

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

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

于 2018-08-18T03:20:35.940 に答える
5

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

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

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

于 2013-11-14T07:28:24.520 に答える
5

という番組があります

sar

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

man sar

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

于 2012-12-14T09:02:04.727 に答える
3

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

vmstat X >> mylogfile

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

于 2009-12-08T16:46:15.517 に答える
0

だから私はこのゲームに遅れていることを知っていますが、これを行う必要があったので、この答えを思いついたばかりで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

withしtopたときの標準出力は次のとおりです。grepKib Mem

KiB Mem : 16047368 total,  8708172 free,  6015720 used,  1323476 buff/cache

これをカットして実行することで、文字通り、使用前の数値だけにフィルターをかけます。

ユーザーは、0.1異なるキャプチャ サンプル レートを実行するために、 を別の数値に変更することができます。私の場合top、キャプチャごとに 1 秒よりも速くメモリ統計を実行できるため、使用したいと思いました。ここでわかるように、1/10 秒ごとに統計をキャプチャしたかったのです。

注: パイピングをcut行うと、ファイルに何かを出力する際に​​大規模な遅延が発生することが判明しました。後で分かったように、cutデータ取得中にコマンドを省略し、後で出力ファイルに対してカット コマンドを実行する方がはるかに高速です。また、テストではタイムスタンプは必要ありませんでした。

したがって、これは次のようになります。

ロギングを開始します。

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
于 2019-09-23T18:28:19.827 に答える