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つのgrep
sは各行のどの位置でも一致する可能性があるため、もちろん出力は異なります。