少し前に、製品バージョンをテスト用にテスターに提出したのですが、テスト結果はまったく予想外のものでした。 しばらくテストしていると、ページが固まってしまいました。この現象から、データベース層で固まっているのではないかと無意識に疑いました。そこで、データベース接続に関するパラメータを確認しました。予想通り、接続数が多すぎました!データベース接続数の問題を解決し、バグは解決したと思ったのですが… しばらくテストした後、ページが再び停止しました。 ! ! タスク マネージャーを開くと、Tomcat のメモリが 1.5G を超えており、Tomcat をシャットダウンできないことがわかりました。原因は何ですか?考えてみると、Tomcat のメモリ増加の原因になりそうな点、つまりマルチスレッドを思いつきました。そこで、スレッド プールの構成のコードを調べましたが、特に怪しい点は見つかりませんでした。 それでは、まずはTomcatをシャットダウンできない問題を解決しましょう。Baiduはコードをチェックし、数十分後に発見しました。Tomcatリスナーの破棄メソッド(contextDestroyed)でスレッドプールが閉じられていなかったのです。この場合、スレッドプールを閉じることができないため、Tomcatをシャットダウンできません。 コードを次のように変更します。 パブリッククラスInitListenerはServletContextListenerを実装します{ プライベート Logger logger = Logger.getLogger(InitListener.class); @オーバーライド パブリック void contextInitialized(ServletContextEvent sce) { logger.info("Tomcatを起動します"); } @オーバーライド パブリック void contextDestroyed(ServletContextEvent sce) { logger.info("Tomcat を閉じ、スレッド プールを閉じます"); ClassPathXmlApplicationContext クラスパスXmlApplicationContext = 新しい ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); ThreadPoolTaskExecutor myTaskExecutor = (ThreadPoolTaskExecutor) classPathXmlApplicationContext.getBean("myTaskExecutor"); タスクをシャットダウンします。 } } さて、Tomcat がシャットダウンできない問題は解決しました。 次に、メモリ オーバーフローの問題を解決します (まずログを参照してください)。 tomcat ログを確認すると、バックグラウンド インターフェイスの Spring 構成ファイルは、ページが呼び出すたびに初期化されることがわかりました。つまり、Spring は要求されるたびに Bean を再挿入し、占有されているメモリはリサイクルされません。 そこで、Spring構成ファイルがいつ初期化されるのか疑問に思いました。Tomcatが起動したとき、キーワードnewが使用されたとき、つまり、 それから、コードをグローバルに検索したところ、案の定、フィルターで見つかりました。インターフェースが出現するたびに、新しいオブジェクトが作成されます。なんてひどいコードでしょう。私は、そのとき自分が考えていたことを心の中で呪い続けました。私はこの経験を警告として受け止め、今後は同じような間違いを繰り返さないように自分自身に言い聞かせるために書き留めておきます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL 5.7 の sql_mode のデフォルト値によって生じる落とし穴と解決策
>>: JavaScript Alert関数の実行順序の詳細な説明
目次1. 問題のあるSQL文たとえば、次の図のような質問をした人がいました。 問題は次のように要約で...
要件: データをリスト形式で表示する場合、表示すべき情報項目が多く、表が横に長くなってしまいます。表...
この記事では、シンプルなショッピングカートを実装するためのJavaScriptの具体的なコードを参考...
CSS3 のボックス サイズ設定 (content-box と border-box) CSS3 の...
なぜこのような記事を書いたかというと、数日前の夜、仕事が終わろうとしていたときに、業務側で突然、テー...
適用シナリオ: iframe ページにスクロール バーがなく、親ウィンドウにスクロール バーが表示さ...
ウェブページを画像としてキャプチャする新機能があったので、人気のhtml2canvasを使ってみまし...
この記事では、vueカードスタイルのクリックして切り替える画像コンポーネントを参考までに紹介します。...
要素 ui テーブルにはドラッグ アンド ドロップによる並べ替え機能が組み込まれておらず、サードパー...
序文MySQL バージョン 8.0.23 では、新しい機能「Invisible Column (In...
目次質問1. webpack webpack-cliをインストールする2. webpackのバージョ...
概要バックアップは災害復旧の基礎であり、システム操作エラーやシステム障害によるデータ損失を防ぐために...
フロントエンド プロジェクトとバックエンド プロジェクトは分離されており、フロントエンドとバックエン...
目次1. 概要2. Nginxインストールパッケージをダウンロードする3. 依存パッケージをインスト...
Mysql 8.0 のインストールの問題とパスワードのリセット1: MySqlをダウンロードする公式...