#1
|
|||
|
|||
port
Oleg Redut написал(а) к All в Apr 15 12:50:46 по местному времени:
Доброе (current) время суток, All! Имеется ява-приложение. Запускается в screen. Иногда зависает и невыходит нормально. Приходится делать kill для screen с этим процессом. Но при повторном запуске сообщает, что порт, который оно использовала - уже занят. Приходится тупо перегружать машину. Можно ли освободить порт какой-то командой? Чтобы в командный файл запихнуть перед запуском явы. Что я могу еще сказать?.. Oleg ... AKA oleg(&)redut.info AKA ICQ 28852595 --- GoldED+/W32-MINGW 1.1.5-b20120515 (пока работает) |
#2
|
|||
|
|||
Re: port
Serguei E. Leontiev написал(а) к Oleg Redut в Apr 15 04:33:41 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Привет Олег, От 13 апреля 2015 г., 12:50:46 в fido7.ru.linux.chainik ты писал: OR> Имеется ява-приложение. Запускается в screen. Иногда OR> зависает и невыходит нормально. Приходится делать kill для OR> screen с этим процессом. Но при повторном запуске сообщает, OR> что порт, который оно использовала - уже занят. Приходится тупо OR> перегружать машину. Можно ли освободить порт какой-то командой? OR> Чтобы в командный файл запихнуть перед запуском явы. Заметим, что при определённых условиях, в течении некоторого времени после закрытия сокета процессом и/или убийства самого процесса, сокет может находится в состояниях ожидания, которые блокируют создание сокета на том же самом порту. Так что перезагружаться не обязательно, достаточно просто подождать некоторое время. Однако, если ждать нет сил, то можно заняться "настройкой" TCP Linux. Например, если ты имеешь дело с состоянием TIME_WAIT, что можно определить командой netstat, то полезно будет прочитать документацию по следующими переменным ядра: sysctl net.ipv4.tcptwrecycle sysctl net.ipv4.tcp_timestamps sysctl net.ipv4.tcptwreuse sysctl net.ipv4.tcp_rfc1337 -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |
#3
|
|||
|
|||
port
Oleg Redut написал(а) к Alexey Vissarionov в Apr 15 10:58:46 по местному времени:
Доброе (current) время суток, Alexey! OR>> Можно ли освободить порт какой-то командой? Чтобы в командный OR>> файл запихнуть перед запуском явы. AV> killall -15 java && sleep 2 && killall -w -9 java Это убивает всю яву, а не освобождает указанный порт. :-( Если запущены 2-3 процесса с явой на разных портах и один я пытаюсь перезапустить, то это не вариант. Кстати, если я убиваю нормально работающий процесс, то порт не захватывается. А если процесс крэшнулся по внутренним причинам и не работает нормальный выход из него, то тогда после убиения и порт не освобождается. Что я могу еще сказать?.. Oleg ... AKA oleg(&)redut.info AKA ICQ 28852595 --- GoldED+/W32-MINGW 1.1.5-b20120515 (пока работает) |
#4
|
|||
|
|||
Re: port
Serguei E. Leontiev написал(а) к Oleg Redut в Apr 15 17:04:42 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Олег, привет, Oleg Redut <Oleg.Redut@f111.n5000.z2.fidonet.org> wrote: >>> Можно ли освободить порт какой-то командой? Чтобы в командный >>> файл запихнуть перед запуском явы. > >> killall -15 java && sleep 2 && killall -w -9 java > > Кстати, если я убиваю нормально работающий процесс, то порт не > захватывается. А если процесс крэшнулся по внутренним причинам и не работает Похоже на то, ждёт он чего-то, наверное, разрыва соединения от клиента :) > нормальный выход из него, то тогда после убиения и порт не освобождается. sleep 240 # 2*msl Не поможет ли? -- Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap) --- ifmail v.2.15dev5.4 |
#5
|
|||
|
|||
Re: port
Eric Pozharski написал(а) к Oleg Redut в Apr 15 09:52:58 по местному времени:
with <MSGID2=3A5000=2F111552c9f67@fidonet.org> Oleg Redut wrote: SKIP OR> Это убивает всю яву, а не освобождает указанный порт. :-( Если OR> запущены 2-3 процесса с явой на разных портах и один я пытаюсь OR> перезапустить, то это не вариант. ps `pgrep -t pts/#` Я screen не пользуюсь, возможно нужно быть пессимистом, ожидать краха и выяснять номер pts заранее. Тогда можно прибить адресно. Но... OR> Кстати, если я убиваю нормально работающий процесс, то порт не OR> захватывается. А если процесс крэшнулся по внутренним причинам и не OR> работает нормальный выход из него, то тогда после убиения и порт не OR> освобождается. Может это java-way? (спекулирую) java форкает еще один процесс, который собсно держит порт. И этот процесс на крах родителя не обращает внимания. Это может быть by design. Однако lsof в помощь. -- Torvalds' goal for Linux is very simple: World Domination Stallman's goal for GNU is even simpler: Freedom --- slrn/pre1.0.0-18 (Linux) |
#6
|
|||
|
|||
Re: port
Serguei E. Leontiev написал(а) к Eric Pozharski в Apr 15 22:21:47 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Эрик, привет, Eric Pozharski <Eric.Pozharski@p101.f94.n463.z2.fidonet.org> wrote: > Может это java-way? (спекулирую) java форкает еще один процесс, > который собсно держит порт. И этот процесс на крах родителя не обращает Вот антиресно, неужто в новых версиях Java появился fork()? -- Успехов, Сергей Леонтьев, <http://www.cryptopro.ru> (NewsTap) --- ifmail v.2.15dev5.4 |
#7
|
|||
|
|||
Re: port
Eric Pozharski написал(а) к Serguei E Leontiev в Apr 15 09:11:47 по местному времени:
with <1187500665@lnfm1.sai.msu.ru> Serguei E Leontiev wrote: >> Может это java-way? (спекулирую) java форкает еще один процесс, >> который собсно держит порт. И этот процесс на крах родителя не SEL> Вот антиресно, неужто в новых версиях Java появился fork()? Не знал, что там все так запущено (хотя, может быть это by design). Тогда только читать lsof (с этого надо было начинать). -- Torvalds' goal for Linux is very simple: World Domination Stallman's goal for GNU is even simpler: Freedom --- slrn/pre1.0.0-18 (Linux) |
#8
|
|||
|
|||
Re: port
Serguei E. Leontiev написал(а) к Eric Pozharski в Apr 15 14:13:26 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Привет Эрик, От 17 апреля 2015 г., 9:11:47 в fido7.ru.linux.chainik ты писал: SEL>> Вот антиресно, неужто в новых версиях Java появился fork()? EP> Не знал, что там все так запущено (хотя, может быть это by EP> design). Тогда только читать lsof (с этого надо было начинать). :) И, если порт принадлежит соединению в TIME-WAIT, FIN_WAIT2, ..., lsof обнаружит на нём "пустоту"? Или есть варианты? -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |
#9
|
|||
|
|||
Re: port
Eric Pozharski написал(а) к Serguei E Leontiev в Apr 15 17:00:53 по местному времени:
with <1187500675@ddt.demos.su> Serguei E Leontiev wrote: SEL>>> Вот антиресно, неужто в новых версиях Java появился fork()? EP>> Не знал, что там все так запущено (хотя, может быть это by EP>> design). Тогда только читать lsof (с этого надо было начинать). SEL> >:) И, если порт принадлежит соединению в TIME-WAIT, FIN_WAIT2, ..., SEL> lsof обнаружит на нём "пустоту"? Или есть варианты? su? Для CLOSE-WAIT работает, LAST-ACK -- упустил. Для TIME-WAIT и прочих проверить не могу -- у меня нету. Но я, теперь, не понимаю другого. TIME-WAIT это для исходящих? Но для исходящих это не должно быть проблемой -- открывается любой свободный. Открывать для исходящих всегда один и тот же порт -- это java-way или именно этот код так делает? (Проверить не на чем -- у меня java нету.) p.s. гыгы, прямо сейчас у vim'а открыт nntp (в CLOSE-WAIT). Что-то в slrn все таки не кошерное есть. -- Torvalds' goal for Linux is very simple: World Domination Stallman's goal for GNU is even simpler: Freedom --- slrn/pre1.0.0-18 (Linux) |
#10
|
|||
|
|||
Re: port
Serguei E. Leontiev написал(а) к Eric Pozharski в Apr 15 03:56:27 по местному времени:
From: "Serguei E. Leontiev" <leo@sai.msu.ru> Привет Эрик, От 18 апреля 2015 г., 17:00:53 в fido7.ru.linux.chainik ты писал: SEL>> >:) И, если порт принадлежит соединению в TIME-WAIT, SEL>> FIN_WAIT2, ..., lsof обнаружит на нём "пустоту"? Или есть SEL>> варианты? EP> su? Для CLOSE-WAIT работает, LAST-ACK -- упустил. Для EP> TIME-WAIT и прочих проверить не могу -- у меня нету. EP> Но я, теперь, не понимаю другого. TIME-WAIT это для исходящих? EP> Но для исходящих это не должно быть проблемой -- открывается EP> любой свободный. Открывать для исходящих всегда один и тот же EP> порт -- это java-way или именно этот код так делает? Если память меня не подводит TIME-WAIT - это для того, кто соединение закрывает (кто сокет закрывает или сам безвременно умирает). На счёт java-way, да и насчёт POSIX-way (для тех, кто боится SO_REUSEADDR). IMНO, единственный "платформенно независимый" путь избежания состояния TIME-WAIT для сервера - это побуждать клиента разрывать соединение. Однако, при сетевых проблемах, это может приводить к длительному процессу завершения сервера (в просторечии "зависанию"). Если в этот момент такой "платформенно независимый" сервер убить - получим TIME-WAIT и невозможность повторного запуска в течении примерно 2*MSL секунд :) Windows/Solaris/Linux/FreeBSD-way путь обеспечения возможности быстрого рестарта - это использовать специальные флажки. Как вариант, для Linux/FreeBSD можно настраивать TCP при помощи sysctl. -- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru --- ifmail v.2.15dev5.4 |