#php エディタの Xinyi は、Go 言語を使用して http post リクエストを行うときにメモリ使用量が高くなる問題を発見しました。この質問は、なぜこんなことが起こるのか、と彼に考えさせるきっかけとなりました。調査と分析の結果、彼は考えられる原因をいくつか見つけ出し、いくつかの解決策を提案しました。この記事では、この質問を詳しく掘り下げて答えを提供します。
k8s コンテナ内で go
アプリケーションを実行しています。これは REST API として機能し、リクエストを受信して elasticsearch に書き込みます。
私のコードは次のとおりです:
リーリー上記のコードでは、パス /logs
をリッスンし、http
を呼び出してデータを elasticsearch に保存します。以下の関数を使用してメモリ使用量を出力すると、メモリが使い果たされるまで alloc
が増加し続けることがわかります。 http.post
呼び出しを削除すると、メモリ使用量は常に 1 ~ 3MB になります。メモリ使用量が増加する原因は何でしょうか?
var r = gin.default() r.post("/logs", func(c *gin.context) { fmt.println("receive log event") printmemusage() jsondata, err := ioutil.readall(c.request.body) d := strings.newreader(jsondata) http.post(fmt.sprintf("%s/_bulk", geteshost()), "application/json", d) ... }) }
httpドキュメントが何度も言及されています:
クライアントは終了時に応答本文を閉じる必要があります:
ドキュメントの例を次に示します:
リーリーこれを行わないと、本体が永久にメモリに残るため、リークが発生します。
以上がhttp post リクエストにより、go でのメモリ使用量が高くなるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。