|
|
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Приложение забирает данные из AMQ сервера по TCP/IP подключению Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Смутила большая нагрузка на процессор, приложение раньше было написано на ПХП и нагрузку он давал не хуже. Стал искать узкое место, профайлер показывает на stompConnection.receive Как дальше понять проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:04 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Так это не потребление CPU, а длительность исполнения. Очевидно что блокирующее чтение по TCP занимает кучу времени. Но там не только время работы, но и время ожидания TCP пакетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:29 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Рекомендую вот это посмотреть. Обе части. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:34 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Hett, А еще 6 секунд это тест ни о чем. Надо запускать на серверной JVM и прогревать код, чтобы видеть более актуальную картину. Кстати, точно ли на серверной запускаете? Ну, и JMH еще можно взять, чтобы отдельные методы померять, исключая IO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 16:00 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак это не потребление CPU, а длительность исполнения. Очевидно что блокирующее чтение по TCP занимает кучу времени. Но там не только время работы, но и время ожидания TCP пакетов. Runnable - как раз только время выполнения, без учета ожидания io. Да и в top процесс в самом верху ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 17:31 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
BlazkowiczHett, А еще 6 секунд это тест ни о чем. Надо запускать на серверной JVM и прогревать код, чтобы видеть более актуальную картину. Кстати, точно ли на серверной запускаете? Ну, и JMH еще можно взять, чтобы отдельные методы померять, исключая IO. Я загнал туда 10 тыс фреймов. При длительных тестах ничего не меняется, скрин делал жалко не на первом тесте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 17:32 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
авторПотому что график на который вы смотрите он вообще не о том Изначально нагрузка была обнаружена утилитой top. Процесс точно грузит cpu ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 17:35 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
HettRunnable - как раз только время выполнения, без учета ожидания io. Да и в top процесс в самом верху Лолшто? Runnable это состояние потока на данный момент https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html Вы себе что-то вообще не то нафантазировали. DriverManager.getConnection() по вашему тоже жрет CPU? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 18:30 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
HettавторПотому что график на который вы смотрите он вообще не о том Изначально нагрузка была обнаружена утилитой top. Процесс точно грузит cpu Я же не говорю что нагрузки нет. Она есть. Просто ваша картинка показывает, в основном, ожидание на блокирующем IO. Понять из нее кто именно нагружает CPU решительно не возомжно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 18:31 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Ожидание io расходует время cpu? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 20:08 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Ожидание io расходует время cpu? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 20:10 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Ок, тогда почему если фреймов нет в очереди, то процессор не загружен и профалер не показывает расход времени, хотя поток ожидает ввода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 20:12 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Впн с шифрованием? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 21:03 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Неа. Никакого шифрования нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 21:07 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Мне больше нечего добавить. Я просто могу присоединится в Блажковичу и сказать что сведения с профайлера нам просто говорят о том что имеют место сетевые ожидания в методе StompConnection::receive(). Это вовсе не говорит нам что ситуация ужасна. Это просто распределение общего времени по состояниям этого конечного автомата. Почему загружен CPU - ХЗ. Тут-бы взять другую конфигурацию и запустить на ней этот макет и просто посмотреть. Может будут различия и тогда уже копать? Непропатчен JDK? Сетевой стек где-то тормозит? (Я уже сталкивался в этим в шестерке. И ловили мы бесконечные таймауты. И сокеты не закрывались долгими месяцами.) Сильно сложный firewall? Где-то включен логгер tcpdump? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 22:25 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Вот профайл -agentlib:hprof=cpu=samples,format=b Код: java 1. 2. 3. 4. 5. 6. Ну тут видно, что чтение из сокета тормозит. Проблема одинаково воспроизводится как на локальной машине с виндовс, так и на сервере с убунтой. авторНепропатчен JDK? Это как? авторИ сокеты не закрывались долгими месяцами Ну если без keep-alive, то это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 08:11 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Есть похожий баг https://bugs.openjdk.java.net/browse/JDK-8075484 закрыт 3 месяца назад. Возможно имеет смысл проверить updates. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 09:41 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
У меня не openjdk... Померил скорости в человеко-понятных единицах: - java приложение читает и обрабатывает 10 тыс фреймов за 10 секунд. - php приложение записывает 10 тыс фреймов за 0.5-0.6 секунды. Т.е. разница почти в 20 раз, это и смущает. Причем не важно, обрабатываю я пришедшие фреймы или просто читаю их и ничего не делаю, время то же. Т.е. на фоне чтения время выполнения остального кода незначительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 11:22 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Подключение/Отправка/Отключение Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. Подключение/Получение/Отключение Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. На получение еще меньше TCP пакетов уходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 11:31 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Hett, Вы видео посмотрели? Померяйте в какой ресурс упирается работа. Добавьте потоков\ядер. Будет ли чтение быстрее? Если, да, то упираемся в CPU и смотреть надо в код. Если, нет, то упираемся в сеть и смотреть надо на работу с сетью. Совершенно не понимаю почему "запись на PHP" сравниваеися с "записью и чтением на Java". Чтение вообще другая операция. Там парсинг, обычно, кучу времени отъедает. Вы проверили что вы запускаете на Server JVM и меряете производительность после разогрева? Иначе, ведь все работает на интерпретации байт-кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 12:20 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Лень было тест писать для чтения, сейчас все таки написал. 25 секунд на 10.000 фреймов (у явы на это уходит 10 секунд). Тем не менее либа на нативном пхп написана и я подозреваю, что там основное время как раз на парсинг уходит. авторВы проверили что вы запускаете на Server JVM и меряете производительность после разогрева? Иначе, ведь все работает на интерпретации байт-кода. Исключено, тестировал нормально, используемые мной профайлеры показывают картину за последние несколько секунд (не среднее с начала запуска), да и даже если будет среднее, то при тестировании в несколько минут оно бы не имело большого веса в общей картине. Определенно узкое место java.net.SocketInputStream.socketRead0 Почему пишет быстро а читает так медленно не знаю, может быть это сам AMQ сервер отдает сообщения не так быстро, как хотелось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 12:29 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Кстати подключаюсь к AMQ серверу на локальной машине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 12:30 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
Переделал тест на более одинаковый (в Java еще вчера AUTO ack сделал). Так вот, если в пхп сделать AUTO то он 10 тыс фреймов за 2 секунды прогоняет. А Ява, напомню, за 10 секунд (при тоже ack=auto). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 12:43 |
|
||
|
Apache Stomp: слишком медленная работа
|
|||
|---|---|---|---|
|
#18+
В проблемное место вот здесь Читают по 1 байту из сокета. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2016, 13:48 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39367563&tid=2123374]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
94ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 451ms |

| 0 / 0 |
