質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

1645閲覧

Go言語のプログラム実行時のメモリ使用量確認方法と、拡張方法

sakuramob

総合スコア16

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/12/11 00:52

Go言語のプログラム実行時のメモリ使用量確認方法と、拡張方法を知りたいです。
実行速度の関係で、できれば、コードの中に埋め込むのではなく、コマンドで確認したいと考えています。
ご存知の方、教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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.82System time (seconds): 4.57を差し引いた13.26秒はI/O待ちです。

I/O待ちとはタイマーやディスクからの読み書き完了待ちや通信のレスポンス待ちなどです。I/O待ちが複数ある時これらを並行処理するようにしてあげると、よりメモリを使いながらCPUの使用率を上げることができます。うまくいけば全体の処理時間を短縮できます。

投稿2018/12/11 04:47

編集2018/12/12 01:47
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakuramob

2018/12/11 05:35

教えてくださりありがとうございます! /usr/bin/timeコマンドで、プログラム実行時のCPU使用率、メモリ使用量などが分かりました。 もし、メモリ拡張方法の方もご存知でしたら、教えていただきたいです。 お忙しいところすみません。
nobonobo

2018/12/11 10:44

すいません、その「メモリ拡張方法」の意味を知りません。なにを意味していますか?
sakuramob

2018/12/12 00:40

言葉足らずで申し訳なかったのですが、 Go言語でプログラムを実行するときに、現状とても時間がかかってしまっている状態です。 なので、プログラムを実行するときに使用するメモリやCPU使用率などを上げる方法があるのでしたら、試してみたいと思い、調べているところです。 こういったところ、もし知見がおありでしたら、ご教授くださいませ。
sakuramob

2018/12/12 02:35

とても分かりやすく丁寧な回答をありがとうございます!! I/O待ちの処理があるか、ある場合は並行処理ができるかどうかを引き続き調査します。 お忙しいところありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問