SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、ここでの解決策が私と同じ問題に遭遇した他の人たちの役に立つことを願っている。

説明: Springboot プロジェクトは Docker イメージで実行されます。Docker ログを見ると、プロジェクトが正常に開始された後、約 1 分後に自動的に再起動し、Web サイトのインターフェイスにアクセスすると nginx が 502 ゲートウェイなどを報告します。サーバーは 2 つあり、1 つはファイル サーバーで、ファイルのアップロードとダウンロード、トークンの検証を行う非常に単純なコードを実行し、もう 1 つは Java アプリケーションを実行します。両方のサーバーが同時にプロジェクト イメージを更新しています。実行後、この問題が発生しましたが、これは非常に奇妙です。

次に、プロジェクトを jar パッケージにして、java -jar xxx.jar を使用してアプリケーション サーバーで直接実行しました。すると、いくつかの場所で停止し、起動を続行できなくなったり、強制終了されたと表示されたりしました。

画像A

プロジェクトのメモリリークが原因でプロセスがシステムによって強制終了されたのではないかと疑い、以前のdockerイメージに変更しましたが、結果は同じでした。nginxの設定が変わったのではないかと疑いましたが、それでもうまくいきませんでした。その後、独自のAlibaba Cloudサーバーに変更して最新のイメージを実行したところ、問題はありませんでした。まったく正常でした。Alibaba Cloudでjarパッケージを実行しても正常でした。そこで、システムが変更されてこの問題が発生したのではないかと疑いました。そこでtopを見てみたところ、

CPU 使用率が高すぎます。非常に異常な未知のプロセスがあります。Baidu で検索して、このコードが定期的に実行するコマンドがわかったので、解決しようとしました。(追記: これは私たちがインストールしたものではなく、オンライン環境でこれを実行したこともありません)

まずステータスを確認します: systemctl status crond

次に、設定されているコマンドを確認します: crontab -e

0 を変更しました。以前は * でした。0 に変更し、保存して終了しました。

次にサービスを停止します: systemctl stop crond

最後に、top をチェックします。プロセスがまだ存在する場合は、直接 kill してから ojbk します。残念です。解決するのに半日かかりました。

SpringBoot プロジェクトの docker 環境で実行する場合の無限再起動問題に関するこの記事はこれで終わりです。SpringBoot docker 無限再起動に関するその他の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerで複数のSpringbootを実行するための詳細なチュートリアル
  • DockerでSpringbootプロジェクトを実行する方法
  • Docker で Springboot プロジェクトを実行する実装

<<:  JS で async await をエレガントに使用する方法

>>:  重要なmysqlログファイルの概要

推薦する

Vueは完全な選択機能を実装しています

この記事の例では、完全な選択機能を実装するためのVueの具体的なコードを参考までに共有しています。具...

Linux システムで Vim を使用してリモート ファイルを読み書きするコマンドの詳細な説明

vim の動作モードを設定する (一時的) :set (モード情報) :set nu — 行番号を表...

vue-cli4.5.xはプロジェクトを素早く構築します

1. vue-cliをインストールする vue.js で vue.js を実行します。 2. プロジ...

MySQL 8.0.17 のインストールと設定のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.17のインストールと設定のグラフィックチュートリアルを記...

MySQL トランザクション分析

取引トランザクションはビジネス ロジックの基本単位です。各トランザクションは一連の SQL ステート...

JDBC を使用して MySQL を操作するための簡単な分析では、Class.forName("com.mysql.jdbc.Driver") を追加する必要があります。

導入データベースに接続するためにJDBCを使用することに慣れている場合は、データベースに接続するため...

リンク更新ページと js 更新ページの使用例

1. リンクの使用方法:コードをコピーコードは次のとおりです。 <a href="j...

PIP で docker-compose をインストールする際のタイムアウト問題の解決方法

1: インストールコマンドpip install docker-compose例外情報socket....

MySQL 一時テーブルの簡単な使用法

MySQL 一時テーブルは、一時的なデータを保存する必要がある場合に非常に便利です。一時テーブルは現...

波効果を作成するための CSS のトリック

純粋な CSS を使用して波の効果を実現することは、常に非常に困難でした。 波形曲線を実現するにはベ...

MySQL 5.7 でルートパスワードを忘れた後に変更する方法の詳細なチュートリアル

序文長い間、MySQL のアプリケーションおよび学習環境は MySQL 5.6 以前のバージョンであ...

Vueライフサイクルの詳細な説明

目次ライフサイクルを理解する理由ライフサイクルとはライフサイクルフック関数作成され、マウントされたフ...

ReactとReduxの配列処理の説明

この記事では、reduce()、filter()、map()、every()、some()、spre...

DBeaver を MySQL バージョン 8 以降に接続し、起こりうる問題を解決する方法の詳細な説明

データベース MySQL バージョン 8.0.18 DBeaver.exeをダウンロードするダウンロ...