クラウドネイティブのコンテキストで JVM メモリを構成する方法

クラウドネイティブのコンテキストで JVM メモリを構成する方法

背景

少し前に、ビジネス開発チームから、アプリケーションのメモリ使用量が非常に高く、頻繁に再起動が発生しているとの報告があり、何が起こっているのか調べてほしいと依頼されました。

これまでこの問題にはあまり注目していなかったので、調査と分析のプロセスを記録しておきます。

まず、監視パネルで Pod の監視を確認しました。

確かにほぼ満杯であることがわかりましたが、アプリケーションの JVM 使用率を確認すると、約 30% しかありませんでした。これは、JVM OOM の原因となったのはアプリケーション メモリがいっぱいだったのではなく、Pod メモリがいっぱいだったために Pod メモリ オーバーフローが発生し、k8s によって強制終了されたことを示しています。

アプリケーションのレプリカ数を維持するために、k8s は Pod を再起動する必要があるため、一定時間実行した後にアプリケーションが再起動されるようです。

このアプリケーションは JVM 8G で構成されており、コンテナは 16G のメモリを要求するため、Pod のメモリ使用量は約 50% になるようです。

コンテナの原理

この問題を解決する前に、まずコンテナの動作原理について簡単に理解しておきましょう。なぜなら、k8s ではすべてのアプリケーションがコンテナ内で実行され、コンテナは基本的にホスト マシン上で実行される通常のアプリケーションだからです。

しかし、Docker を使用すると、各コンテナで起動されたアプリケーションが互いに干渉せず、ファイルシステム、ネットワーク、CPU、メモリが完全に分離され、まるで異なるサーバーで 2 つのアプリケーションが実行されているように感じられます。

実際のところ、これはブラックテクノロジーではありません。 Linux はバージョン 2.6.x 以降、長い間namespace分離をサポートしてきました。 namespaceを使用すると、2 つのプロセスを完全に分離できます。

単にリソースを分離するだけでは不十分で、CPU、メモリ、ディスク、帯域幅などのリソースの使用を制限することも必要です。これはcgroupsを使用して設定することもできます。

特定のプロセスのリソースを制限することができます。たとえば、ホストマシンに 4 コアの CPU と 8G のメモリがある場合、他のコンテナを保護するには、コンテナを 1 コアの CPU、2G のメモリという上限で構成する必要があります。

この図は、コンテナ テクノロジーにおける名前空間と cgroup の役割を明確に示しています。要するに:

  • 名前空間は分離を担う
  • cgroupは制限する責任がある

k8s にも対応する引き出しがあります:

 resources: requests: memory: 1024Mi cpu: 0.1 limits: memory: 1024Mi cpu: 4

このリソース リストは、アプリケーションがコンテナーに少なくとも 1 つの 0.1 コアと 1024M のリソースを割り当てる必要があり、最大 CPU 制限が 4 コアであることを示しています。

異なるOOM

この問題に戻ると、コンテナに OOM があり、それが k8s によって再起動されることを確認できます。これは制限を設定する目的でもあります。

k8s メモリ オーバーフローによりコンテナが終了した場合、終了コード 137 のイベント ログが表示されます。

アプリケーションの JVM メモリ構成はコンテナ構成サイズと同じであるため、両方とも 8 GB ですが、Java アプリケーションにはオフヒープ メモリなどの JVM 管理外のメモリも含まれており、コンテナ メモリ サイズが簡単に 8 GB の制限を超え、コンテナ メモリ オーバーフローが発生する可能性があります。

クラウドネイティブバックグラウンドの最適化

アプリケーション自体は多くのメモリを使用しないため、ヒープメモリを 4 GB に制限することをお勧めします。これにより、コンテナのメモリ制限を回避し、問題を解決できます。

もちろん、後でアプリケーション構成の列にも提案を追加します。JVM 構成はコンテナ制限の 2/3 未満にし、メモリを予約することをお勧めします。

実際のところ、本質は開発モデルが変わっていないということです。従来の Java アプリケーション開発モデルでは、すべてのアプリケーションが大容量メモリを搭載した仮想マシンにデプロイされていたため、コンテナのメモリ サイズさえもわからず、コンテナ メモリの制限を認識することができませんでした。

これは、追加の JVM が存在する Java アプリケーションでは特に顕著になる可能性があります。古いバージョンの JDK でも、ヒープ メモリ サイズが設定されていない場合、コンテナーのメモリ制限を感知できず、自動生成された Xmx がコンテナーのメモリ サイズよりも大きくなり、OOM が発生します。

<<:  クラウドネイティブとは何か、そしてクラウドネイティブアプリケーションの12の要素を理解する

>>:  Mobile Cloud と Venustech が共同で Mobile Cloud を開始 |ヴィーナステックセキュリティブランド

推薦する

これら4つのことはエッジコンピューティングの真の姿を理解するのに役立ちます

著者についてボストンを拠点とするベンチャーキャピタル会社コンバージの投資家、ジェームズ・ファルコフ氏...

SEO担当者は、独自のリソースに基づいてウェブサイトのキーワードを設定する必要があります。

ウェブサイトに最も適切なキーワードの数はいくつでしょうか? この質問は実のところ長い間議論されてきま...

SEO業界への参入に向けた発展の方向性はどこにありますか?

最近、私の友人の何人かはタオバオに切り替えたり、ゆっくりと電子商取引に挑戦したりしています。私たちが...

Autohome が独自に運営する垂直型 Web サイトはレッド オーシャンでしょうか、それともブルー オーシャンでしょうか?

8月末、盛拓メディアは、自動車とITという2つの事業分野に応じて、ウェブサイトグループを2つの独立し...

timeweb: 老舗ロシアVPS業者、中国語ページとWeChat決済を追加、月額5元

ロシアの業者であるtimewebは13年以上運営されており、今でも非常に有名で、ロシアのVPS業界で...

表面的な部分を超えて問題を見てください。4つの文章でSEOの本当の姿がわかります。

記事の本文に入る前に、この文章を見てみましょう。「1994年に中国で最初の国際インターネット輸出が登...

新浪はポルノ関連の犯罪で重い罰金を科される可能性があり、NBAのライブ放送事業の将来は不透明

劉佳新浪はわいせつな情報やポルノ情報を流布したとして、81万5000ドルの罰金を科せられ、一部のライ...

クラウドとジェネレーティブ AI の今後の動向

絶えず変化するビジネス環境において、データは驚くべき速度で増加しています。データの急増により、あらゆ...

SEO担当者がプレッシャーのかかる状況で持つべき4つの心構えを簡単に分析

企業で働く場合でも、他社の SEO コンサルタントとして働く場合でも、ほとんどの SEO 担当者はこ...

SEO 求人検索の経験を 4 つステップごとに共有

私は 2011 年に卒業し、学校を卒業するとすぐに SEO 実践者の仲間入りをしました。しかし、SE...

LeaseWeb - 2.97 ドル/kvm/メモリ 1g/ハードディスク 40g/トラフィック 4T/コンピュータ ルーム 3 室

LeaseWeb は、オランダのアムステルダムに拠点を置くホスティング プロバイダーです。1999 ...

A5フォーラムがドメイン名を変更しSEOの姿勢を観察

A5公式ニュースによると、6月27日、A5トレーディングコミュニティは新しいドメイン名www.adm...

Baidu ダブル 11 ブランド マーケティング戦略

百度は、ダブルイレブンマーケティングキャンペーンに合わせて、プロモーション期間中のトラフィックを活用...

広告会社が新華網の登録番号を「複製」し、詐欺の疑いがかけられた

昨日の午後、一部のネットユーザーが「Yinyi.com」というウェブサイトが新華網のページに非常に似...

Baidu ウェブマスター プラットフォームが福祉ウェブサイトの検証アップグレードを追加

個人的には、Baidu Webmaster Platform の以前のウェブサイト検証方法は少し面倒...