lsofバリアントのための他の出力

lsofバリアントのための他の出力

MongoDB Javaドライバ(2.11.3)を使用するJavaアプリケーションがあります。ドキュメントに記載されているように、接続プーリングを処理する必要があるアプリケーション全体で静的MongoClientインスタンスを使用しています。長い時間が経過すると(Minecraftに慣れている場合はBungeeCordです)、開いたファイルが多すぎるという例外が発生します。見て

$ lsof -p 7616 -n | grep "123.456.7.8:27017" | wc -l
6

ポート27017に16の接続があることを示しています。しかし、私たちが見ると:

$ lsof -n | grep "123.456.7.8:27017" | awk '{print $2}' | grep 7616 | wc -l
438

最初のコマンドよりも多くの接続を表示します。

最初の質問は、これら2つのコマンドの出力が異なる理由であり、2番目の質問は、Java MongoDBドライバを使用したときに同様の状況を経験した人がいるかどうかです。

答え1

実際の出力を見なければ確かに言うことはできませんが、最も可能性の高い説明は27017別の場所で起こることです。最初のコマンドは、PIDを持つプロセスのファイルを一覧表示し、次を含むすべての行を5253印刷します。27017 キューのどこでも

2番目のコマンドは、開いているすべてのファイルを印刷してから、次のものを含むすべての行を選択します。27017 キューのどこでも。私はあなたがあなたの質問に指摘したのとは27017異なり、2番目のコマンドでも実際にgrepingしていると仮定します。16062

いずれにせよ、コマンドはポートを具体的に確認しません27017。実際、なぜポートがリストされるのを期待したのかさえ理解できません。lsofポートではないファイルを見てください。たとえば、私のシステムで出力を見つけると、sshポートは表示されません。lsof -n

とにかく、より具体的な例は次のとおりです。

$ sudo lsof -np 7033 | head
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
firefox 7033 terdon  cwd    DIR                8,6   491520  16646145 /home/terdon
firefox 7033 terdon  rtd    DIR                8,7   548864         2 /
firefox 7033 terdon  txt    REG                8,7   143680   1841618 /opt/firefox/firefox
firefox 7033 terdon  DEL    REG               0,30           10335506 /tmp/.glT5RaDf
firefox 7033 terdon  mem    REG                8,7 12303504   1573445 /usr/share/fonts/truetype/unifont/unifont.ttf
firefox 7033 terdon  DEL    REG                0,4          970489906 /SYSV00000000
firefox 7033 terdon  mem    REG                8,7  7470672    540090 /usr/lib/x86_64-linux-gnu/gstreamer-0.10/libgstffmpeg.so
firefox 7033 terdon  mem    REG                8,7  5177387   1580807 /usr/share/fonts/truetype/wqy/wqy-microhei.ttc
firefox 7033 terdon  mem    REG                8,7   120688    532953 /usr/lib/x86_64-linux-gnu/gstreamer-0.10/libgstvideoscale.so

クエリは27017任意のフィールドで一致できます。サイズ、PID、ノードなどにすることができます。他の番号の一部である場合もあります。たとえば、

$ printf "12345\n12" | grep 12
12345
12

上記のように、12単語を構成する2行目だけでなく、両方の行に一致があります。この-wスイッチを使用して単語grep全体を一致させることができます。

$ printf "12345\n12" | grep -w 12
12

したがって、2番目のコマンドではPIDに出力を制限しないため、2つのgrepsは各行のどの位置でも一致する可能性があるため、もちろん出力は異なります。

関連情報