少し前に、製品バージョンをテスト用にテスターに提出したのですが、テスト結果はまったく予想外のものでした。 しばらくテストしていると、ページが固まってしまいました。この現象から、データベース層で固まっているのではないかと無意識に疑いました。そこで、データベース接続に関するパラメータを確認しました。予想通り、接続数が多すぎました!データベース接続数の問題を解決し、バグは解決したと思ったのですが… しばらくテストした後、ページが再び停止しました。 ! ! タスク マネージャーを開くと、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年以上マイクロフロントエンドプロジェクトに取り組んできました。チームは10個のマイクロアプリ...
目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...
mysqlrootパスワードの設定と変更初めて MySQL データベースに入ります。 !環境変数にm...
1. 設置環境Windows7 で MySQL5.6 データベースの解凍バージョンをアンインストー...
MySQLデータベースをインストールするa) MySQL ソースインストールパッケージをダウンロード...
MySQLはOracleのようなシーケンスを実装しているOracle は通常、主キー フィールドを処...
Tomcat テストで 404 問題が発生します。問題は次のとおりです。 HTTP ステータス 40...
目次1. サブクエリとは何ですか? 2. 自己結合3. 自然な結合4. 外部接続1. サブクエリとは...
VMwareaのインストールプロセスは説明しませんが、主にwin7イメージをロードする方法を説明しま...
ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...
nginx はリクエストを受信すると、まず server_name でサーバーを照合し、次にサーバー...
問題の説明仕事で以下の成果を達成したいと考えています。 解決div タグに相対配置を追加し、絶対配置...
この文の目的は何ですか?コードをコピーコードは次のとおりです。 <link rel="...
1. msyqlの高速バージョンをダウンロードする docker pull hub.c.163.co...