0

OpenJDK 64 ビット サーバー VM (ビルド 25.275-b01、混合モード) を使用して、Ubuntu 20.04 OS で Tomcat 9 を実行しています。jstat、jstack などを使用して診断情報を収集しようとすると、PIDが見つからないことがわかります。jps も Tomcat プロセス ID を識別できません。

onetwothreefourなどのいくつかの投稿を確認しましたが、これらの回答のどれも私の問題を解決するのに役立ちませんでした!

Tomcat プロセスが実行されているユーザー名を渡していますが、jstat はそのプロセスを見つけることができません。sudo -u tomcat jstat -gc 476174 5000

それが重要な場合:

  1. Tomcat プロセスが-Djava.io.tmpdir=/tmp This folder isowned by root user but has full permissions(777) enabled で開始されていることがわかります。
  2. Tomcat プロセスが開始されると、名前systemd-private-e6d8b5dc224848f8a64a3e943ac2e9c4-tomcat9.service-UH5knj(サービスの後の最後の数文字-プロセスが再起動されるたびに変更される) を持つフォルダーが作成され、所有者がルートとして作成されるのを確認できます (おそらく、Tomcat サービスを使用して開始するためsudo service tomcat9 start)。このフォルダーにはアクセス許可があります。のrwx------

この問題を解決する方法に関するヒントはありますか?

ありがとう、ショバナ

4

2 に答える 2

1

Ubuntu 20 では、Tomcat 9 サービスはデフォルトでプライベート tmp スペースで実行されるため、Java ツールはその pid を見つけることができません。

このプライベート tmp 設定は、 で定義され/lib/systemd/system/tomcat9.serviceていPrivateTmpます。デフォルトでは「はい」に設定されています。そのファイルを直接編集することもできますが、変更を行うための推奨される方法は、次のコマンドを使用してオーバーライド ファイルを作成することです。

sudo systemctl edit tomcat9

次の内容をファイルに追加して保存します。

[Service]
PrivateTmp=no
ReadWritePaths=/tmp/

コンテンツを含むこのファイルが作成されます。/etc/systemd/system/tomcat9.service.d/override.conf

次に、systemd デーモンをリロードして Tomcat を再起動する必要があります。

sudo systemctl daemon-reload
sudo systemctl restart tomcat9

これで、sudo を直接使用して Java ツールを呼び出すことができるはずsudo jstat...です。何らかの理由で、Tomcatユーザーとして実行しようとすると機能しませんsudo -u tomcat jstat...

于 2021-06-02T18:08:59.973 に答える