powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Stomp: слишком медленная работа
25 сообщений из 42, страница 1 из 2
Apache Stomp: слишком медленная работа
    #39366891
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение забирает данные из 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.
    private static StompConnection stompConnection = new StompConnection();
    .........
    public static void main(String[] args) {
                stompConnection.open(
                        Properties.getInstance().getProperty("stomp_server_host"),
                        Integer.parseInt(Properties.getInstance().getProperty("stomp_server_port"))
                );
                stompConnection.connect("", "");
                logger.info("Success connected to " + Properties.getInstance().getProperty("stomp_server_host"));
                stompConnection.subscribe("/queue/clients_status", Stomp.Headers.Subscribe.AckModeValues.CLIENT);
                stompConnection.getStompSocket().setKeepAlive(true);
                stompConnection.getStompSocket().setSoTimeout(5000);

                while (!isShuttingDown) {
                    try {
                        message = stompConnection.receive(300000);
                        final JsonObject jsonMessage = jsonParser.parse(message.getBody()).getAsJsonObject();
                        stompConnection.ack(message);
                        .....
                        .....
                    } catch (SocketTimeoutException e) {
                        // no write traceback here!
                        logger.warn("Error read from MQ");
                    }
                }
    }



Смутила большая нагрузка на процессор, приложение раньше было написано на ПХП и нагрузку он давал не хуже.
Стал искать узкое место, профайлер показывает на stompConnection.receive
Как дальше понять проблему?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39366939
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это не потребление CPU, а длительность исполнения. Очевидно что блокирующее чтение по TCP занимает кучу времени. Но там не только время работы, но и время ожидания TCP пакетов.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39366944
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую вот это посмотреть. Обе части.
YouTube Video
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39366990
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

А еще 6 секунд это тест ни о чем. Надо запускать на серверной JVM и прогревать код, чтобы видеть более актуальную картину. Кстати, точно ли на серверной запускаете? Ну, и JMH еще можно взять, чтобы отдельные методы померять, исключая IO.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367058
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТак это не потребление CPU, а длительность исполнения. Очевидно что блокирующее чтение по TCP занимает кучу времени. Но там не только время работы, но и время ожидания TCP пакетов.
Runnable - как раз только время выполнения, без учета ожидания io.
Да и в top процесс в самом верху
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367060
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczHett,

А еще 6 секунд это тест ни о чем. Надо запускать на серверной JVM и прогревать код, чтобы видеть более актуальную картину. Кстати, точно ли на серверной запускаете? Ну, и JMH еще можно взять, чтобы отдельные методы померять, исключая IO.

Я загнал туда 10 тыс фреймов. При длительных тестах ничего не меняется, скрин делал жалко не на первом тесте.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367064
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПотому что график на который вы смотрите он вообще не о том
Изначально нагрузка была обнаружена утилитой top. Процесс точно грузит cpu
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367115
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettRunnable - как раз только время выполнения, без учета ожидания io.
Да и в top процесс в самом верху
Лолшто? Runnable это состояние потока на данный момент
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html
Вы себе что-то вообще не то нафантазировали.
DriverManager.getConnection() по вашему тоже жрет CPU?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367116
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettавторПотому что график на который вы смотрите он вообще не о том
Изначально нагрузка была обнаружена утилитой top. Процесс точно грузит cpu
Я же не говорю что нагрузки нет. Она есть. Просто ваша картинка показывает, в основном, ожидание на блокирующем IO. Понять из нее кто именно нагружает CPU решительно не возомжно.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367183
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ожидание io расходует время cpu?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367185
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ожидание io расходует время cpu?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367186
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, тогда почему если фреймов нет в очереди, то процессор не загружен и профалер не показывает расход времени, хотя поток ожидает ввода?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367197
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впн с шифрованием?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367199
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неа. Никакого шифрования нет.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне больше нечего добавить. Я просто могу присоединится в Блажковичу и сказать
что сведения с профайлера нам просто говорят о том что имеют место сетевые ожидания
в методе StompConnection::receive(). Это вовсе не говорит нам что ситуация ужасна.
Это просто распределение общего времени по состояниям этого конечного автомата.

Почему загружен CPU - ХЗ. Тут-бы взять другую конфигурацию и запустить на ней этот
макет и просто посмотреть. Может будут различия и тогда уже копать? Непропатчен JDK?
Сетевой стек где-то тормозит? (Я уже сталкивался в этим в шестерке. И ловили
мы бесконечные таймауты. И сокеты не закрывались долгими месяцами.) Сильно
сложный firewall? Где-то включен логгер tcpdump?
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367321
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот профайл -agentlib:hprof=cpu=samples,format=b

Код: java
1.
2.
3.
4.
5.
6.
CPU SAMPLES BEGIN (total = 3415) Wed Dec 14 11:30:23 2016
rank   self  accum   count trace method
   1 90.25% 90.25%    3082 300794 java.net.SocketInputStream.socketRead0
   2  1.20% 91.45%      41 300920 java.net.PlainSocketImpl.socketAvailable
   3  1.05% 92.50%      36 300934 java.net.SocketOutputStream.socketWrite0
   4  0.82% 93.32%      28 301154 java.net.SocketOutputStream.socketWrite0



Ну тут видно, что чтение из сокета тормозит.
Проблема одинаково воспроизводится как на локальной машине с виндовс, так и на сервере с убунтой.

авторНепропатчен JDK?
Это как?

авторИ сокеты не закрывались долгими месяцами
Ну если без keep-alive, то это нормально.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367357
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть похожий баг https://bugs.openjdk.java.net/browse/JDK-8075484 закрыт 3 месяца назад.

Возможно имеет смысл проверить updates.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367461
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не openjdk...

Померил скорости в человеко-понятных единицах:

- java приложение читает и обрабатывает 10 тыс фреймов за 10 секунд.
- php приложение записывает 10 тыс фреймов за 0.5-0.6 секунды.

Т.е. разница почти в 20 раз, это и смущает. Причем не важно, обрабатываю я пришедшие фреймы или просто читаю их и ничего не делаю, время то же. Т.е. на фоне чтения время выполнения остального кода незначительно.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367477
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключение/Отправка/Отключение

Код: 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.
root@proxy:/opt/activemq# tcpdump port 61613
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:28:34.677359 IP Range.51870 > 192.168.4.230.61613: Flags [S], seq 1354240226, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
14:28:34.677445 IP 192.168.4.230.61613 > Range.51870: Flags [S.], seq 675989400, ack 1354240227, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:34.677534 IP Range.51870 > 192.168.4.230.61613: Flags [S], seq 1354240226, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
14:28:34.677561 IP 192.168.4.230.61613 > Range.51870: Flags [S.], seq 675989400, ack 1354240227, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:34.677610 IP 192.168.4.230.61613 > Range.51870: Flags [S.], seq 675989400, ack 1354240227, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:34.677627 IP 192.168.4.230.61613 > Range.51870: Flags [S.], seq 675989400, ack 1354240227, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:34.678900 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:34.678994 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:34.678997 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:34.678998 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:34.678999 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:34.679000 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:34.689793 IP Range.51870 > 192.168.4.230.61613: Flags [P.], seq 1:28, ack 1, win 513, length 27
14:28:34.689863 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 28, win 229, length 0
14:28:34.689971 IP Range.51870 > 192.168.4.230.61613: Flags [P.], seq 1:28, ack 1, win 513, length 27
14:28:34.689991 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 28, win 229, options [nop,nop,sack 1 {1:28}], length 0
14:28:34.690033 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 28, win 229, length 0
14:28:34.690053 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 28, win 229, options [nop,nop,sack 1 {1:28}], length 0
14:28:34.694586 IP 192.168.4.230.61613 > Range.51870: Flags [P.], seq 1:105, ack 28, win 229, length 104
14:28:34.694851 IP 192.168.4.230.61613 > Range.51870: Flags [P.], seq 1:105, ack 28, win 229, length 104
14:28:34.696297 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 105, win 512, options [nop,nop,sack 1 {1:105}], length 0
14:28:34.696330 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 105, win 512, options [nop,nop,sack 1 {1:105}], length 0
14:28:34.696468 IP Range.51870 > 192.168.4.230.61613: Flags [P.], seq 28:308, ack 105, win 512, length 280
14:28:34.696492 IP Range.51870 > 192.168.4.230.61613: Flags [FP.], seq 308:321, ack 105, win 512, length 13
14:28:34.696499 IP Range.51870 > 192.168.4.230.61613: Flags [P.], seq 28:308, ack 105, win 512, length 280
14:28:34.696512 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 322, win 237, options [nop,nop,sack 1 {28:308}], length 0
14:28:34.696579 IP Range.51870 > 192.168.4.230.61613: Flags [FP.], seq 308:321, ack 105, win 512, length 13
14:28:34.696585 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 322, win 237, options [nop,nop,sack 1 {308:322}], length 0
14:28:34.696624 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 322, win 237, options [nop,nop,sack 1 {28:308}], length 0
14:28:34.696626 IP 192.168.4.230.61613 > Range.51870: Flags [.], ack 322, win 237, options [nop,nop,sack 1 {308:322}], length 0
14:28:34.698297 IP 192.168.4.230.61613 > Range.51870: Flags [F.], seq 105, ack 322, win 237, length 0
14:28:34.698544 IP 192.168.4.230.61613 > Range.51870: Flags [F.], seq 105, ack 322, win 237, length 0
14:28:34.699739 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 106, win 512, length 0
14:28:34.699785 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 106, win 512, length 0
14:28:34.699810 IP 192.168.4.230.61613 > Range.51870: Flags [R], seq 675989506, win 0, length 0
14:28:34.699945 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 106, win 0, length 0
14:28:34.699956 IP 192.168.4.230.61613 > Range.51870: Flags [R], seq 675989506, win 0, length 0
14:28:34.700017 IP Range.51870 > 192.168.4.230.61613: Flags [.], ack 106, win 0, length 0
14:28:34.700026 IP 192.168.4.230.61613 > Range.51870: Flags [R], seq 675989506, win 0, length 0
14:28:34.700086 IP 192.168.4.230.61613 > Range.51870: Flags [R], seq 675989506, win 0, length 0
14:28:34.700088 IP 192.168.4.230.61613 > Range.51870: Flags [R], seq 675989506, win 0, length 0
14:28:34.700088 IP 192.168.4.230.61613 > Range.51870: Flags [R], seq 675989506, win 0, length 0
^C
42 packets captured
42 packets received by filter
0 packets dropped by kernel




Подключение/Получение/Отключение
Код: 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.
root@proxy:/opt/activemq# tcpdump port 61613
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:28:45.788824 IP Range.51875 > 192.168.4.230.61613: Flags [S], seq 20892152, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
14:28:45.788889 IP 192.168.4.230.61613 > Range.51875: Flags [S.], seq 879498913, ack 20892153, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:45.789019 IP Range.51875 > 192.168.4.230.61613: Flags [S], seq 20892152, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
14:28:45.789043 IP 192.168.4.230.61613 > Range.51875: Flags [S.], seq 879498913, ack 20892153, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:45.789092 IP 192.168.4.230.61613 > Range.51875: Flags [S.], seq 879498913, ack 20892153, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:45.789109 IP 192.168.4.230.61613 > Range.51875: Flags [S.], seq 879498913, ack 20892153, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
14:28:45.789591 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:45.789688 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:45.790478 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:45.790527 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:45.790528 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:45.790529 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 1, win 513, options [nop,nop,sack 1 {0:1}], length 0
14:28:45.792254 IP Range.51875 > 192.168.4.230.61613: Flags [P.], seq 1:28, ack 1, win 513, length 27
14:28:45.792299 IP 192.168.4.230.61613 > Range.51875: Flags [.], ack 28, win 229, length 0
14:28:45.792411 IP Range.51875 > 192.168.4.230.61613: Flags [P.], seq 1:28, ack 1, win 513, length 27
14:28:45.792419 IP 192.168.4.230.61613 > Range.51875: Flags [.], ack 28, win 229, options [nop,nop,sack 1 {1:28}], length 0
14:28:45.792456 IP 192.168.4.230.61613 > Range.51875: Flags [.], ack 28, win 229, length 0
14:28:45.792458 IP 192.168.4.230.61613 > Range.51875: Flags [.], ack 28, win 229, options [nop,nop,sack 1 {1:28}], length 0
14:28:45.798444 IP 192.168.4.230.61613 > Range.51875: Flags [P.], seq 1:105, ack 28, win 229, length 104
14:28:45.798751 IP 192.168.4.230.61613 > Range.51875: Flags [P.], seq 1:105, ack 28, win 229, length 104
14:28:45.799410 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 105, win 512, options [nop,nop,sack 1 {1:105}], length 0
14:28:45.799460 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 105, win 512, options [nop,nop,sack 1 {1:105}], length 0
14:28:45.801322 IP Range.51875 > 192.168.4.230.61613: Flags [P.], seq 28:83, ack 105, win 512, length 55
14:28:45.801389 IP Range.51875 > 192.168.4.230.61613: Flags [P.], seq 28:83, ack 105, win 512, length 55
14:28:45.801407 IP 192.168.4.230.61613 > Range.51875: Flags [.], ack 83, win 229, options [nop,nop,sack 1 {28:83}], length 0
14:28:45.801519 IP 192.168.4.230.61613 > Range.51875: Flags [.], ack 83, win 229, options [nop,nop,sack 1 {28:83}], length 0
14:28:45.805811 IP 192.168.4.230.61613 > Range.51875: Flags [P.], seq 105:486, ack 83, win 229, length 381
14:28:45.806085 IP 192.168.4.230.61613 > Range.51875: Flags [P.], seq 105:486, ack 83, win 229, length 381
14:28:45.807239 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 486, win 511, options [nop,nop,sack 1 {105:486}], length 0
14:28:45.807289 IP Range.51875 > 192.168.4.230.61613: Flags [.], ack 486, win 511, options [nop,nop,sack 1 {105:486}], length 0
^C
30 packets captured
30 packets received by filter
0 packets dropped by kernel



На получение еще меньше TCP пакетов уходит.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367530
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

Вы видео посмотрели? Померяйте в какой ресурс упирается работа.
Добавьте потоков\ядер. Будет ли чтение быстрее? Если, да, то упираемся в CPU и смотреть надо в код.
Если, нет, то упираемся в сеть и смотреть надо на работу с сетью.

Совершенно не понимаю почему "запись на PHP" сравниваеися с "записью и чтением на Java". Чтение вообще другая операция. Там парсинг, обычно, кучу времени отъедает.

Вы проверили что вы запускаете на Server JVM и меряете производительность после разогрева? Иначе, ведь все работает на интерпретации байт-кода.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367542
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень было тест писать для чтения, сейчас все таки написал. 25 секунд на 10.000 фреймов (у явы на это уходит 10 секунд). Тем не менее либа на нативном пхп написана и я подозреваю, что там основное время как раз на парсинг уходит.

авторВы проверили что вы запускаете на Server JVM и меряете производительность после разогрева? Иначе, ведь все работает на интерпретации байт-кода.

Исключено, тестировал нормально, используемые мной профайлеры показывают картину за последние несколько секунд (не среднее с начала запуска), да и даже если будет среднее, то при тестировании в несколько минут оно бы не имело большого веса в общей картине. Определенно узкое место java.net.SocketInputStream.socketRead0
Почему пишет быстро а читает так медленно не знаю, может быть это сам AMQ сервер отдает сообщения не так быстро, как хотелось бы.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367544
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати подключаюсь к AMQ серверу на локальной машине.
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367563
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал тест на более одинаковый (в Java еще вчера AUTO ack сделал). Так вот, если в пхп сделать AUTO то он 10 тыс фреймов за 2 секунды прогоняет. А Ява, напомню, за 10 секунд (при тоже ack=auto).
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367676
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В проблемное место вот здесь
Читают по 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.
    @Override
    public Object unmarshal(DataInput in) throws IOException {

        try {

            // parse action
            String action = parseAction(in);

            // Parse the headers
            HashMap<String, String> headers = parseHeaders(in);

            // Read in the data part.
            byte[] data = NO_DATA;
            String contentLength = headers.get(Stomp.Headers.CONTENT_LENGTH);
            if ((action.equals(Stomp.Commands.SEND) || action.equals(Stomp.Responses.MESSAGE)) && contentLength != null) {

                // Bless the client, he's telling us how much data to read in.
                int length = parseContentLength(contentLength);

                data = new byte[length];
                in.readFully(data);

                if (in.readByte() != 0) {
                    throw new ProtocolException(Stomp.Headers.CONTENT_LENGTH + " bytes were read and " + "there was no trailing null byte", true);
                }

            } else {

                // We don't know how much to read.. data ends when we hit a 0
                byte b;
                ByteArrayOutputStream baos = null;
                while ((b = in.readByte()) != 0) {

                    if (baos == null) {
                        baos = new ByteArrayOutputStream();
                    } else if (baos.size() > getMaxDataLength()) {
                        throw new ProtocolException("The maximum data length was exceeded", true);
                    }

                    baos.write(b);
                }

                if (baos != null) {
                    baos.close();
                    data = baos.toByteArray();
                }
            }

            return new StompFrame(action, headers, data);

        } catch (ProtocolException e) {
            return new StompFrameError(e);
        }
    }
...
Рейтинг: 0 / 0
Apache Stomp: слишком медленная работа
    #39367713
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завернул все через BufferedInputStream, общая скорость возросла в 10 раз.
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Stomp: слишком медленная работа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]