Как получить сетевой журнал Linux?

14

У нас есть Java-сервер, работающий в Linux на определенном порту, который принимает постоянные соединения для тысяч и тысяч пользователей. В последнее время наши клиенты не могут подключиться с ошибкой тайм-аута. Мы подозреваем, что трафик становится слишком высоким, но наш журнал Java показывает, что не многие подключаются в секунду.

Мы подозреваем, что, может быть, слишком многие пытаются одновременно, и они в основном отбрасываются на уровне операционной системы, и, следовательно, у java-программы никогда не будет возможности принять соединение? Есть ли какой-нибудь журнал в Linux, который может показать, что кто-то пытается попасть в сокет?

erotsppa
источник

Ответы:

8

iptables -I INPUT -p tcp --dport some_port -j LOGзатем
tail -f /var/log/messages
, чтобы узнать, сколько данных было затронуто этим правилом: iptables -L -n -v
Или вы можете запустить tcpdump и произвести поиск портов.

Джеймс Л
источник
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 получают на уровне сокетов. В то же время вы хотите соотнести это с информацией о сети ОС. Взгляните на AppFirst. Они могут делать такие вещи.

IAPaddler
источник
0
watch -n1 -d "netstat -an | grep ESTABLISHED | wc -l"

показывает установленные в данный момент соединения.

Сравните это с вашими активными ulimitнастройками и, конечно, с максимальным количеством соединений, которое может обработать ваше Java-приложение.

sjas
источник