Linuxネットワークログを取得する方法は?


12

数千および数千のユーザーの永続的な接続を受け入れる特定のポートで、Linuxで実行されているJavaサーバーがあります。最近、クライアントはタイムアウトエラーで接続できません。トラフィックが非常に高くなっていると思われますが、実際には、javaログには1秒あたりの接続数が少ないことが示されています。

あまりにも多くの人が同時に試しており、基本的にOSレベルでドロップされているため、Javaプログラムが実際に接続を受け入れる機会を得ることはないと考えられますか?誰かがソケットをヒットしようとしていることを示すことができるLinuxのログのようなものはありますか?

回答:


7

iptables -I INPUT -p tcp --dport some_port -j LOGそして
tail -f /var/log/messages
その後、そのルールに見舞われているどのくらいのデータを表示するには: iptables -L -n -v
または、tcpdumpを実行して、ポートをgrepすることができます。


2
+1。わずかな変更を加えるだけで、新しい接続試行だけをキャッチすることができますiptables -I INPUT -p tcp --dport some_port -m state --state NEW。各接続試行の詳細に興味がない限り、省略-j LOGすると、システムログファイルに不要なデータが大量に送信されるのを防ぐことができます。
スティーブン

3

ネットワークに本当に厄介な問題があるときは、wiresharkを起動する傾向があります。私にとって、核心の詳細を把握しなければならないとき、より良いネットワーク診断ツールはありません。また、ソースボックスまたは宛先ボックスにインストールできない場合でも心配しないでください。あなたは実行することができtcpdump -w、あなたの都合の良い時に別のボックス上のwiresharkに開始および/またはエンドポイント上のファイル、およびフィードファイルへの書き込みパケットデータに。


うん、私は次のようにそれにフィルターを置くことをお勧めしたいtcpdump -nS dst port <some port>
gravyface

0

Javaスレッドがソケットレベルで何を取得しているのかを正確に確認できれば幸いです。同時に、それをOSネットワーク情報と相関させたいと思うでしょう。AppFirstをご覧ください。彼らはこのようなことをすることができます。


0
watch -n1 -d "netstat -an | grep ESTABLISHED | wc -l"

現在確立されている接続を表示します。

これをアクティブなulimit設定と比較し、もちろんJavaアプリが処理できる最大接続数と比較してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.