少し前に、製品バージョンをテスト用にテスターに提出したのですが、テスト結果はまったく予想外のものでした。 しばらくテストしていると、ページが固まってしまいました。この現象から、データベース層で固まっているのではないかと無意識に疑いました。そこで、データベース接続に関するパラメータを確認しました。予想通り、接続数が多すぎました!データベース接続数の問題を解決し、バグは解決したと思ったのですが… しばらくテストした後、ページが再び停止しました。 ! ! タスク マネージャーを開くと、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関数の実行順序の詳細な説明
透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...
目次スケルトンスクリーンの使用Vueアーキテクチャスケルトンスクリーンアイデアの概要抽象コンポーネン...
サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...
モバイル デバイス向けに開発する場合、Retina 画面上で要素の境界線が太くなるという問題に遭遇す...
<br />この世に道はない。より多くの人が歩くようになると、それは道になります。最初は...
01. コマンドの概要tr コマンドは、標準入力からの文字を置換、圧縮、削除できます。ある文字セット...
目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...
1つ。まず、アイデアとしてパッケージ化する必要があります。私はSpringbootフレームワークプロ...
MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...
1 MySQLをダウンロードするダウンロードアドレス: http://downloads.mysq...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
KILL [接続 | クエリ] processlist_id MySQL では、各接続は個別のスレ...
最近友人からDockerを触ったことがあるかと聞かれました。あまり自信がなかったので答えられませんで...
MySQLではisnull()関数をnull値の代わりとして使用することはできません。次のように:ま...
META タグは、一般的に タグと呼ばれ、HTML Web ページのソース コード内の重要な HTM...