3

Go のパフォーマンスを他の言語と比較するために、Rober Huntt のベンチマークから Go コードを実行しています。そのベンチマークから Go コードを実行すると ( http://code.google.com/p/multi-language-bench/source/browse/trunk/src/#src%2Fhavlak%2Fgoを参照)、メモリ不足になります。例外:

...............ランタイム: メモリ不足: 1048576 バイトのブロックを割り当てられません (1270808576 が使用中) スロー: メモリ不足

私の質問は、Go のメモリ空間を増やす方法です。それに応じて設定できるコンパイラの起動パラメータまたはフラグはありますか? GoソースのMakefileファイルは何も明らかにしません...

ありがとう、オリバー

4

4 に答える 4

6

OS のバージョン、32 ビットと 64 ビットの違い、およびgo versionその結果をお知らせいただければ、さらにお役に立てる可能性があります。

  • Go の 32 ビット バージョンには既知のヒープ メモリの問題があり、通常は本番環境では使用されません。64 ビット プラットフォームで 64 ビット バージョンの Go を使用していることを確認してください。
  • Go 1.1 になる go のブランチでは、最大ヒープ領域が 8 GB から 128 GB にアップグレードされました。私が話したコアの Go 開発者は、メモリを集中的に使用する本番環境で Go のヒントを使用することを推奨しています。
  • Go on Windows はあまり使用されていないため、あまりテストされていません。これはバグである可能性があります。Go は、Linux や OS X ではより多くの試行錯誤が行われています。
  • peterSO が述べたように、Robert Huntt のベンチマークには欠陥があります。詳しくは、Go プログラムのプロファイリングをご覧ください。
于 2013-01-28T23:54:50.070 に答える
4

詳細が不足しているため、大雑把に推測することしかできません。

  • 32 ビットの Go バージョンを実行している場合は、代わりに 64 ビット バージョンを試して、tip リビジョンを使用してください。
  • 可能であれば、* nix プラットフォームを使用してください - IMO より優れたメモリ管理を備えています。
于 2013-01-28T10:08:42.497 に答える
1

Robert Huntt のベンチマークには欠陥があります。これは Go の有効なベンチマークではありません。詳細については、 Go プログラムのプロファイリングを参照してください。

于 2013-01-28T12:03:12.563 に答える
0

興味があるかもしれない人のために、私はミスターにメールを送りました。ハント自身、ヒープ サイズを調整またはパラメータ化できる (文書化されていない) コンパイラ スイッチがあるかどうかを尋ねました。これは、そのようなスイッチが存在するに違いないと最初に誤って仮定したためでしたが、文書化されていません。そして、ここでの私の投稿に返信した人も誰も知らないようでした。私はここでjvmがどのように機能するかによって「あまりにも刺激を受けた」と思います...

いずれにせよ、彼は別のコンパイラ (gcc ベースのコンパイラ、または plan-9 ベースのコンパイラ) を試してみることを勧めました。次に、もちろん 64 ビット マシンで試してください。

彼はまた、Go のメモリ管理に関する良い記事を教えてくれました: http://lwn.net/Articles/428100/

しかし、いいえ、メモリ設定をいじるコンパイラスイッチはありません。

よろしく、 オリバー

于 2013-02-01T15:11:47.777 に答える