2

開いているファイルが多すぎるというエラーの正確な問題を知りたいです。解決策をグーグルで調べましたが、この問題が発生する理由と問題の解決方法がわかりませんでした。それはulimit値に関するものですか?


スタック エラー: SEVERE: ソケットの受け入れに失敗しましたServerSocket.implAccept(ServerSocket.java:530) at java.net.ServerSocket.accept(ServerSocket.java:498) at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServer‌ SocketFactory.java:61) at org .apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352) – user2883376 昨日

これは、言語に基づいてメッセージを取得するためのコードの最後の更新です。ApplicationContext context = new ClassPathXmlApplicationContext("app-context.xml"); name = context.getMessage(key, null, locale); 名前を返す;

このエラーに関する提案はありますか?

4

2 に答える 2

-2

ただし、「ulimit」が行のどこかで発生すると、Tomcat が停止して同じエラーが発生します。

したがって、これを回避するには、コマンド「lsof -u username」または単に「lsof」を使用して、Linux でアプリケーション ユーザーの開いているファイルのリストを確認し、コード関連のファイル (.properties ファイルなど) が開いているかどうかを確認します。lsof -t -u username その特定の tomcat ユーザーに対して# kill -9 コマンドを使用して特定のファイルを削除します。

クラスの静的ブロックに単純に記述してこれらのファイルをロードするようにコードを修正する必要があります。そのため、任意の数のユーザーによって複数のヒットが行われた場合でも、1 つのファイルのみが読み込まれます。

lsofこれで、同じコマンドで新しい変更をデプロイした後に再確認して確認できます。1 つのファイルのみが表示されます。これにより、毎回 ulimit を上げることなく、問題を完全に修正できます。

于 2017-05-05T21:51:34.333 に答える