Толстый клиент Java замедляется при соединении с localhost, быстро с удаленным

Чтобы иметь конфигурацию в масштабе всей системы, нужно выполнить следующее:

sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL "http://your.updates-server.lan:8088/index.sucatalog"

Для корректной работы и над Leopard и над Snow Leopard, правильная команда для издания:

defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL "http://your.updates-server.lan:8088/index-leopard-snowleopard.merged-1.sucatalog"

Счастливо используемый и протестированный в моей сети :)

0
задан 28 October 2010 в 21:05
6 ответов

Это оказалось ошибкой в приложении. С маленьким MTU TCP фрагментировал пакеты и не представление ошибки. С высоким MTU на обратной петле ошибка проявилась.

0
ответ дан 4 December 2019 в 15:07

Все, что я имею для Вас, больше отлаживает идеи без определенного порядка...

  • это - действительно обратная петля, это - проблема? Вы попытались соединиться с сетевым IP-адресом сервера, а не 127.0.0.1? (это использует петлевой интерфейс в моей системе, но это должно исключить нечетные проблемы DNS),
  • системная нагрузка высоко в это время (io, проблемы могут заставить системную нагрузку быть выше, чем все отдельные процессы вместе, казалось бы, были бы)?
  • Проверьте информацию netstat на каждый процесс, если Recv-Q клиента высок, клиентский процесс не читает из своего сокета регулярно.
  • Попытайтесь смотреть tcpdump -i lo, это могло бы помочь выяснить, существует ли очевидный шаблон к передаваемым пакетам.
  • "vmstat 1" показывает решительно другое поведение для удаленного доступа по сравнению с локальными версиями доступа (т.е. действительно ли содержание является набором данных в RAM и в сервере дб и в клиенте Java, вынуждающем Вас подкачивать)?
  • Попытайтесь увеличить MTU на устройстве закольцовывания, значениях по умолчанию шахты к 16 436. Это не поможет многому, если Вы сделаете много небольших крошечных пакетов. Небольшие крошечные пакеты, кажется, имеют собственные проблемы. Я не программист Java, таким образом, я не знаю, как можно было бы сделать это, но установка TCP_NODELAY попытки (setsockopt системный вызов) на соединении. Этот кажется, что это имеет грузовой культ после, но предположительно если коммуникация является односторонней, клиент будет отвечать TCP ACKs более регулярно и сохранять течение данных.
  • Другая вещь попытаться настроить: echo 1 > /proc/sys/net/ipv4/tcp_low_latency
  • При проигрывании с setsockopt посмотрите то, что происходит, если Вы увеличиваете отправку и получение буферов в клиенте?
  • Вы не используете своего рода древние 2,2 ядра, Вы? Была, по-видимому, своего рода огромная петлевая исправленная ошибка, въезжают задним ходом 2.3.x согласно 2.4 TODO
  • Возможно, существует ошибка в клиенте (или в Java), Вы выполнили тот же самый клиент в отдельной системе Linux с той же средой выполнения Java?
1
ответ дан 4 December 2019 в 15:07
  • 1
    1. проверенный также IP, и lo и eth 2. системная нагрузка является низкой в течение того времени (<1) 3. должен будет сделать это, спасибо за предложение 4. да, я позже думал о выполнении полного tcpdump, загрузке в wireshark и сравнении 5. то же как 3. 6. вряд ли это - нормальный Ethernet с 1 500 метрическими тоннами, никакие крупные кадры 7. то же как 3 8. не думайте, что это имеет значение, должен будет проверить 9. нет, это - официальное ядро SLES10, довольно недавнее 2.6 10. нет, но это - единственная система, мы испытываем ее на (и у нас есть много подобных установок, как в службе удаленных рабочих столов и базе данных по тому же серверу Linux) –  Hubert Kario 16 October 2010 в 19:18
  • 2
    После небольшого количества отладки его становятся еще более странными: Если я установил MTU на 1500 на lo, приложение быстро, но когда это оставляют в значении по умолчанию 16k, это медленно. Захват пакетов показывает, что существует задержка ~40ms прежде, чем отправить ACK за пакетами 4 096 байтов в размере (DB отправляет те 6k в двух пакетах, 4k измеренный и измеренный 2k), но если 4k фрагментируется, это быстро. Приложение не делает ничего необычного, просто Сокет Java, перенесенный в bufferedInputStream (я пытался установить внутренний буфер даже на 1 МиБ без любых изменений). –  Hubert Kario 19 October 2010 в 22:00

Это будет звучать странным, но это работало только что на меня.
Проверьте/etc/hosts файл, чтобы иметь Ваше имя хоста в соответствии с localhost или, добавить тот, указывающий 127.0.0.1 или тот, который слушает.

1
ответ дан 4 December 2019 в 15:07

Для устранения X11vnc и NX как возможные причины задержки я записал бы консольному режиму тестовую программу Java не-GUI, которая выполняет поиски базы данных или тестовые транзакции и время когда приложение, работающее на ПК и на сервере (например, использующее SSH/Putty для вызова его).

Съемка общим планом: я также проверил бы обратное разрешение DNS в случае, если драйверы JDBC используют это (например, для входа), если DNS правильно не настроен, программное обеспечение может очевидно зависнуть, ожидая тайм-аутов разрешения DNS. Как местоположение DBMS настроено в приложении Java?

0
ответ дан 4 December 2019 в 15:07
  • 1
    , я - поддержка этой программы... Трудно предоставить более полную подробную информацию здесь, это - NoSQL (ориентированный на документ на вид парадигмы) внутреннее решение с транзакцией, контрольной точкой и осуществлением схемы (просто тип, никакой основной / внешний ключ) поддержка. Но да, похоже, что мы должны будем уменьшить приложение до просто механизма запроса и затем посмотреть на производительность, вещь: это не тривиально, чтобы сделать. Это действительно просто похоже на круговую задержку для локальных пакетов в дольше, чем для удаленных пакетов (!?) и я понятия не имею, что может вызвать это. –  Hubert Kario 16 October 2010 в 01:00

Вы попытались соединиться с 127.0.0.1 вместо localhost? Это делает несколько вещей. Предотвращение сумасшедших проблем DNS является одним из них, но также и многие клиенты видят "localhost" и затем решают не использовать сеть вообще и использовать некоторый локальный сокет вместо этого. Это мог быть этот автоматический технологический переключатель, который уничтожает Ваше приложение. Несколько программ делают этого майора как mysql. Используя localhost петлевой адрес IP вынуждает их на самом деле использовать сетевой сокет.

0
ответ дан 4 December 2019 в 15:07
  • 1
    да, попробованное соединение с localhost, 127.0.0.1 и локальный IP-адрес, тот же результат –  Hubert Kario 16 October 2010 в 19:04
  • 2
    Гул. Как насчет того, чтобы использовать Ваше клиентское программное обеспечение на ДРУГОМ компьютерном соединении назад с тем? Другими словами, действительно ли это характерно для сервера базы данных на той машине или общей проблеме с использованием клиента и сервера на той же машине? –  Caleb 17 October 2010 в 00:45
  • 3
    , Он подключен к MTU, когда это является большим, приложение является медленным, когда MTU является маленьким, приложение быстро. –  Hubert Kario 19 October 2010 в 22:09

Мой любимый инструмент для проблем как они strace. Вы можете просто strace клиент и видеть его пауза после выполнения чего-то (блокирующийся вызов как подключение, или читайте). Если существует некоторый цикл событий, который затеняет паузу, можно попытаться фильтровать те syscalls, или можно включить опции синхронизации к strace и сохранить весь вывод в файле. Другой прием должен ожидать просто, пока он не "заканчивает" то, что держало его и хит ^C, таким образом, можно посмотреть на то, что, оказалось, повредило его из его оцепенения.

0
ответ дан 4 December 2019 в 15:07

Теги

Похожие вопросы