Что такое шлюз по умолчанию для Вашей машины разработки? Шлюз по умолчанию, принимающий Коммутатор уровня 3/, Маршрутизатор должен знать, как достигнуть другого интерфейса сервера.
У Вас должно быть что-то как
ip route xxx.yyy.159.36 netmask 255.255.255.240 gw xxx.zzz.109.65
Это должно заставить вещи работать. Но в случае, если это не достаточно, затем включите передачу IP на машине xxx.zzz.109.65 использование
sysctl net.ipv4.ip_forward = 1
Также отредактируйте/etc/sysctl.conf и включите IP, передающий там также.
Удостоверьтесь iptables ВПЕРЕД, цепочка таблицы фильтра на xxx.zzz.109.65 позволяет пакетную передачу для Вашей машины разработки.
Это может произойти, если Вы создаете сокет, но никогда не соединяете () или связываете () с ним. Ваш лучший выбор может быть к strace (-и следующие) приложением и затем перекрестно сослаться с выводом lsof для определения, какие сокеты вызывают проблему. В качестве награды метод отладки: если Вы перенесете свои вызовы сокета с отладочной информацией и выпишете им к/dev/null, то это появится в strace, не давая Вам весело большие файлы журнала.
Первой вещью, которую я сделал бы, является incrase если Ваш предел дескриптора файла:
~# vi /etc/sysctl.conf
fs.file-max = 331287
Затем я удостоверился бы, что Ваша система актуальна, это включает все библиотеки и серверы. Его возможное, что Ваш сервер JAVA-приложения устарел (при использовании одного). Также возможность, что Ваш сервер приложений неправильно конфигурируется, необходимо посмотреть конфигурационный файл и понизить Ваш connectionTimeout
и/или Ваш maxKeepAliveRequests
(Я не уверен, какой сервер приложений Ваше использование или если Вы используете один вообще...).
Я не уверен, что это приложение делает, но если Вы не думаете, что требуются десятки тысяч сокетов затем, это - почти наверняка "утечка дескриптора файла" в Вашем JAVA-приложении. Вам, вероятно, придется отправить отчет об ошибках поставщику. В этом отчете об ошибках необходимо включать информацию о том, как воссоздать проблему.
Вот некоторые способы отладить проблему.
Wireshark (или twireshark для cli) является лучшим инструментом, чтобы видеть, как эти сокеты используются. Wireshark даст Вам передохнуть вниз типа трафика, бросаемого по проводу. Его вероятное, за которым первые несколько соединений будут следовать и затем это поразит предел дескриптора файла. После того как предел дескриптора файла поражен затем, Wireshark не собирается брать на чем-либо (и более опрятный netstat в этом отношении), но это поможет сузить проблему. Там, возможно, случай, куда много исходящего SYN's отправляется, однако никакой SYN/ACKs, получается таким образом, много соединений TCP просто застревает в состоянии SYN_WAIT.
Если у Вас есть доступ к исходному коду, и Вы знаете тип создаваемых сокетов (таких как использование strace или просто поиск кода) затем, можно открыть проект в Eclipse (или другой IDE) и установить точку останова в функции, которая создает эти сокеты. Когда точка останова поражена, затем можно посмотреть на отслеживание стека. Эта утечка дескриптора файла, возможно, простой бесконечный цикл или возможно значение тайм-аута сокета является слишком большой. Другая возможность состоит в том, что приложение Java не делает a socket.close()
очищать соединения. В выполнении завершения обычно выполняют finely
блок a try/catch
(Да сокет должен всегда иметь попытку/выгоду в Java, или это не создаст :). В конце дня его вероятное, что приложение Java не обрабатывает свой IOException's правильно.
Используя Python, я встретился с той же проблемой на сокетах SSL:
Решение состояло в том, чтобы развернуть уровень SSL перед закрытием:
Это закрывает сокеты правильно в моем приложении.