少し前に、製品バージョンをテスト用にテスターに提出したのですが、テスト結果はまったく予想外のものでした。 しばらくテストしていると、ページが固まってしまいました。この現象から、データベース層で固まっているのではないかと無意識に疑いました。そこで、データベース接続に関するパラメータを確認しました。予想通り、接続数が多すぎました!データベース接続数の問題を解決し、バグは解決したと思ったのですが… しばらくテストした後、ページが再び停止しました。 ! ! タスク マネージャーを開くと、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関数の実行順序の詳細な説明
Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...
序文Linux カーネルでは、netfilter は、パケット フィルタリング、ネットワーク アドレ...
MySQL バージョン 5.0 ではストアド プロシージャのサポートが開始されました。ストアド プロ...
この記事では、参考までに、計算機を実装するためのWeChatアプレットの具体的なコードを紹介します。...
序文全文インデックスを使用できるのは Innodb と MyISAM ストレージ エンジンのみです ...
mysqlはブール型を返します最初のケースでは、直接戻ります select id='22a...
目次序文問題の説明原因分析拡大する総括する序文最近、データの欠落やデータの損失に関するフィードバック...
本文は以下から始まります。 123WORDPRESS.COM ダウンロード:純粋な CSS3 で超リ...
本文に入る前に、オーバーフローとフレックスレイアウトの使い方をいくつか紹介します。 overflow...
目次リアクトフック序文なぜフックなのか?クラス関数クラスとフックの比較フックはコンポーネントの状態を...
準備する1. 必要なインストールパッケージをダウンロードするhttps://www.php.net/...
目次製品要件アイデア問題ライブラリ選択をドラッグコンポーネントを生成する方法コンポーネントを生成する...
1.ハードディスクを追加する2. パーティションの状態を確認します: fdisk -l 3. パーテ...
table1 に 5 つのレコードを挿入する場合、次のコードは誤りです。 テーブル1に(id,na...
序文JavaScript で記述できるアプリケーションは、最終的には JavaScript で記述さ...