У меня есть программа, которая по сути является сервером tomcat с базой данных postgreSQL, работающим на CentOS Linux 6.3. Когда клиент отправляет на сервер больший объем данных (~ 10 МБ), который должен быть получен по TCP 9090, кажется, что клиент зависает и не получает ответа от сервера. Я не увидел ничего существенного в журналах, все, что я смог найти, это то, что соединение существует через порт 9090 и что в recv-Q в выводе netstat находится около 3,5 МБ. Вероятно, это проблема системы или приложения?
Вот что показывает strace: 9089 futex(0x7fdd80862528, FUTEX_WAKE_PRIVATE, 1) = 0
9089 futex(0x7fdd81e145a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870092, 226655000}, ffffffff <unfinished ...>
9085 <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
9085 futex(0x7fdd88004728, FUTEX_WAKE_PRIVATE, 1) = 0
9085 futex(0x7fdd94013464, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870092, 226812000}, ffffffff <unfinished ...>
9071 <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
9071 futex(0x7fde00092c28, FUTEX_WAKE_PRIVATE, 1) = 0
9071 futex(0x40b62e64, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870087, 319631000}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
9071 futex(0x7fde00092c28, FUTEX_WAKE_PRIVATE, 1) = 0
9071 futex(0x40b62e64, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, {1374870087, 369779000}, ffffffff
Это привело к нехватке памяти для процесса Java. Добавление ОЗУ и настройка БД разрешили это. Проблемы с памятью Java? Шокирует, а?