http post リクエストにより、go でのメモリ使用量が高くなるのはなぜですか?

PHPz
リリース: 2024-02-14 15:24:08
転載
936 人が閲覧しました

为什么 http post 请求在 go 中给我带来很高的内存使用率?

#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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート