如何获得Linux网络日志?


14

我们有一个运行在Linux上的Java服务器的特定端口,该端口接受成千上万个用户的持久连接。最近,我们的客户无法连接并出现超时错误。我们怀疑流量太高了,但是我们的Java日志实际上显示每秒连接的数量并不多。

我们怀疑是否可能有太多同时尝试,并且它们基本上已在操作系统级别删除,因此Java程序从未真正有机会接受连接吗?linux中是否有某种日志可以显示有人试图敲打套接字?

Answers:


8

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应用程序可以处理的最大连接数进行比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.