Go言語のプログラム実行時のメモリ使用量確認方法と、拡張方法を知りたいです。
実行速度の関係で、できれば、コードの中に埋め込むのではなく、コマンドで確認したいと考えています。
ご存知の方、教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
「/usr/bin/time -v 実行プログラム」でかなりの情報が取れます。
ピーク時のメモリ使用量であれば
... Maximum resident set size (kbytes): ### ...
などが参考になると思います。
注意点はtimeコマンドはシェル組み込みコマンドではなくgnu版を呼ぶ必要がある点です。
コメントからの質問に対する追記:
メモリ使用量やCPU使用量のプログラムの実行環境を阻害するものを取り除いた上限値は
コードの内容で決定します。その上であまりメモリやCPUの使用量が上がらない場合は
そのようになるコードを書いているだけです。
コードを変えずに外部のコマンドからいじっても変更することはできません。
例えばとあるコマンドを実行した結果を表示したとき、
sh
1$ /usr/bin/time -v XXXX 2 Command being timed: "XXXX" 3 User time (seconds): 4.82 4 System time (seconds): 4.57 5 Percent of CPU this job got: 41% 6 Elapsed (wall clock) time (h:mm:ss or m:ss): 0:22.65 7 Average shared text size (kbytes): 0 8 Average unshared data size (kbytes): 0 9 Average stack size (kbytes): 0 10 Average total size (kbytes): 0 11 Maximum resident set size (kbytes): 38384 12 Average resident set size (kbytes): 0 13 Major (requiring I/O) page faults: 9492 14 Minor (reclaiming a frame) page faults: 609811 15 Voluntary context switches: 110213 16 Involuntary context switches: 24058 17 Swaps: 0 18 File system inputs: 0 19 File system outputs: 0 20 Socket messages sent: 94 21 Socket messages received: 4939 22 Signals delivered: 875 23 Page size (bytes): 4096 24 Exit status: 0
トータル実行時間Elapsed (wall clock) time (h:mm:ss or m:ss): 0:22.65
に対し、
User time (seconds): 4.82
とSystem time (seconds): 4.57
を差し引いた13.26秒はI/O待ちです。
I/O待ちとはタイマーやディスクからの読み書き完了待ちや通信のレスポンス待ちなどです。I/O待ちが複数ある時これらを並行処理するようにしてあげると、よりメモリを使いながらCPUの使用率を上げることができます。うまくいけば全体の処理時間を短縮できます。
投稿2018/12/11 04:47
編集2018/12/12 01:47総合スコア3367
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/11 05:35
2018/12/11 10:44
2018/12/12 00:40
2018/12/12 02:35