Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Stomp: слишком медленная работа / 25 сообщений из 42, страница 1 из 2
14.12.2016, 15:04
    #39366891
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Приложение забирает данные из 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
14.12.2016, 15:29
    #39366939
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Так это не потребление CPU, а длительность исполнения. Очевидно что блокирующее чтение по TCP занимает кучу времени. Но там не только время работы, но и время ожидания TCP пакетов.
...
Рейтинг: 0 / 0
14.12.2016, 15:34
    #39366944
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Рекомендую вот это посмотреть. Обе части.
YouTube Video
...
Рейтинг: 0 / 0
14.12.2016, 16:00
    #39366990
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Hett,

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

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

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

Почему загружен CPU - ХЗ. Тут-бы взять другую конфигурацию и запустить на ней этот
макет и просто посмотреть. Может будут различия и тогда уже копать? Непропатчен JDK?
Сетевой стек где-то тормозит? (Я уже сталкивался в этим в шестерке. И ловили
мы бесконечные таймауты. И сокеты не закрывались долгими месяцами.) Сильно
сложный firewall? Где-то включен логгер tcpdump?
...
Рейтинг: 0 / 0
15.12.2016, 08:11
    #39367321
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Вот профайл -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
15.12.2016, 09:41
    #39367357
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Есть похожий баг https://bugs.openjdk.java.net/browse/JDK-8075484 закрыт 3 месяца назад.

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

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

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

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

Код: 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
15.12.2016, 12:20
    #39367530
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Hett,

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

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

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

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

Исключено, тестировал нормально, используемые мной профайлеры показывают картину за последние несколько секунд (не среднее с начала запуска), да и даже если будет среднее, то при тестировании в несколько минут оно бы не имело большого веса в общей картине. Определенно узкое место java.net.SocketInputStream.socketRead0
Почему пишет быстро а читает так медленно не знаю, может быть это сам AMQ сервер отдает сообщения не так быстро, как хотелось бы.
...
Рейтинг: 0 / 0
15.12.2016, 12:30
    #39367544
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Кстати подключаюсь к AMQ серверу на локальной машине.
...
Рейтинг: 0 / 0
15.12.2016, 12:43
    #39367563
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Переделал тест на более одинаковый (в Java еще вчера AUTO ack сделал). Так вот, если в пхп сделать AUTO то он 10 тыс фреймов за 2 секунды прогоняет. А Ява, напомню, за 10 секунд (при тоже ack=auto).
...
Рейтинг: 0 / 0
15.12.2016, 13:48
    #39367676
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
В проблемное место вот здесь
Читают по 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
15.12.2016, 14:05
    #39367713
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Stomp: слишком медленная работа
Завернул все через BufferedInputStream, общая скорость возросла в 10 раз.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Stomp: слишком медленная работа / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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