Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Tomcatのバグ(64184)と思われる事象について

WEB/APサーバ上のTomcatのログ(catalina.out)に、以下のエラーが連続※して出力されました。
※エラーはTomcatのサービスを再起動するまで出力され続けました。

・・・
・・・
11-Feb-2021 17:27:38.701 情報 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.users.MemoryUserDatabase.backgroundProcess 更新されたソース[file:/usr/local/tomcat/conf/tomcat-users.xml]からメモリユーザーデータベース[UserDatabase]を再ロードしています
11-Feb-2021 17:27:38.701 重大 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.users.MemoryUserDatabase.open ユーザー情報データベースとして指定された [conf/tomcat-users.xml] は存在しません。
11-Feb-2021 17:27:38.701 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.users.MemoryUserDatabase.open [conf/tomcat-users.xml]のクローズに失敗しました
    java.io.FileNotFoundException: /usr/local/tomcat/conf/tomcat-users.xml (ファイルを開きすぎです)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
        at org.apache.catalina.users.MemoryUserDatabase.open(MemoryUserDatabase.java:466)
        at org.apache.catalina.users.MemoryUserDatabase.backgroundProcess(MemoryUserDatabase.java:689)
        at org.apache.catalina.realm.UserDatabaseRealm.backgroundProcess(UserDatabaseRealm.java:160)
        at org.apache.catalina.realm.CombinedRealm.backgroundProcess(CombinedRealm.java:309)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1145)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1353)
        at java.lang.Thread.run(Thread.java:748)
・・・
・・・

このエラーが発生した時間帯にtomcat-users.xmlは更新しておらず、
また操作ログを確認しても、上記のエラーが発生した時間帯にユーザー操作は行われていなかったため、
アプリケーション起因で発生したものではないとして調査継続していたところ、下記のサイトにたどり着きました。
https://bz.apache.org/bugzilla/show_bug.cgi?id=64184

上記エラーとサイトに記載されているバグの内容が酷似しているため、Tomcatのバグが起因で発生したのか?と思ったのですが、
WEB/APサーバで使用しているTomcatのバージョンは「8.5.57」であり、既にFIXされているはずのバージョンであることが分かりました。
※サイトに記載されているバグは「8.5.52」でFIXされたようです。
※WEB/APサーバ上にtomcat-users.xmlは存在していますが、Webアプリケーションマネージャのユーザ名およびパスワード記載箇所は全てコメントアウトしています。

WEB/APサーバの構成は以下となります。
OS:
RedHat Enterprise Linux 7.4
ミドルウェア:
Apache 2.4.6
Tomcat 8.5.57
Openjdk 1.8.0.161

FIXされているはずのバージョンで、上記と同様の事象が発生した方はいないでしょうか?
もしいらっしゃるのであれば、この事象への恒久対策もしくは暫定対策※についてご教示いただけると助かります。
※暫定対策として今のところ考えられるのは、再度このエラーが発生した場合に備えた時間稼ぎとして、ファイルディスクリプタの上限を増やすことが考えられ、
 復旧にはTomcatの再起動しかない状況です。

掲示板に対しての投稿が初めてであり、拙い投稿内容となってしまい申し訳ございませんが、
何卒ご意見等いただけますと幸いです。
不足している情報等あればその旨ご連絡をお願いいたします。

2

回答

84283

閲覧

2件の回答

評価

0

アプリが何もしてない時にも定期的にファイルを開きに行ってるなら、ユーザ操作がなくても発生し得るけどね。
そういうことがないと自信を持って言えるならTomcatの問題だろうけど。

https://bz.apache.org/bugzilla/show_bug.cgi?id=62924
こいつに近いね。
2年以上前だけど、先祖返りしたりした可能性はあるかも。
当該バージョンは使ってないので分からない。

評価

0

念のため。ここでいう「ファイル」には、Connectionも含まれるようだ。
なのでアプリを調査する場合、対象はファイルの入出力だけでなくHTTPやらjdbcやらも含めてになる。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。