
shadowjack
04.04.2017
09:20:41
Да, думаю нужен close в дополнение/вместо shutdown

Константин
04.04.2017
09:23:01
так он есть
просто как писали выше - сокет не закрывается еще 60 сек

shadowjack
04.04.2017
09:23:42
На стороне эликсира

Google

Константин
04.04.2017
09:23:43
ровно через 60 сек скрипт продолжает выполнение
сейчас добавлю

shadowjack
04.04.2017
09:24:59
Попробуй без shutdown просто close.

Константин
04.04.2017
09:25:37
оно так было изначально, разницы нет

shadowjack
04.04.2017
09:26:03
Ты сейчас попробовал?

Александр
04.04.2017
09:26:42
я думаю php не рвёт
netstat ом посмотри TIME_WAIT
и какой пид их держит

Константин
04.04.2017
09:30:46
да откуда прозрачность, блин берется((((
5 сек

Александр
04.04.2017
09:31:49
http://php.net/manual/ru/function.socket-close.php
там в доке снизу показаны опции
попробуй с ними

Google

Константин
04.04.2017
09:35:55
да, дело пишут, сейчас протестирую

shadowjack
04.04.2017
09:38:57
В общем сдаётся мне time_wait будет или на сервере или на клиенте. Без опций.

Константин
04.04.2017
09:41:43
значит так.. получается, что можно увеличить количество одновременно открытых tcp соединений до 60к штук. Т.к. время ожидания закрытия соединений 60 сек - у нас пропускная спосоюность 1к в сек
уже не плохо)
теперь можно игрануть с временем ожидания
тем самым увеличить до 2к и более в сек

Max
04.04.2017
09:42:43
число портов тоже можно увеличить
хотя я наверное гоню
в пакетах всё равно 2 байта под них же

shadowjack
04.04.2017
09:44:42
cat /proc/sys/fs/file-max
Хотя исходящих портов да, ограниченное количество
Есть идея, до работы дойду - попробую. Выложи пожалуйста исходники.

Александр
04.04.2017
10:13:00
ещё у бенчмарке включи ELIXIR_ERL_OPTIONS="+K true"
у меня ab на ноуте с ковбоем выдаёт 45000 rps

Константин
04.04.2017
10:27:27
Я ПОБЕДИЛ!!!!!!!!
$linger = array ('l_linger' => 0, 'l_onoff' => 1);
socket_set_option($sock, SOL_SOCKET, SO_LINGER, $linger);
Бля...
Вот между стрелками код
таким образом он полностью закрывает соединение

Google

Константин
04.04.2017
10:29:15
скотина этот пыхыпэ, сволочь, гад, недруг..

Александр
04.04.2017
10:29:30
тестил бы ab или wrk
там эти проблемы давно решили

shadowjack
04.04.2017
10:29:41
Да это не только в PHP. Так TCP работает.

Александр
04.04.2017
10:29:41
или tsung ещё есть
http://www.phoenixframework.org/blog/the-road-to-2-million-websocket-connections
вот тут с тюнингом

Константин
04.04.2017
10:30:23
да я читал эту штуку, уже некоторые вещи заюзал

shadowjack
04.04.2017
10:30:47
Сколько в результате получилось?

Константин
04.04.2017
10:37:36
100к за 7 сек
1 миллион за 30 сек без отправки назад

Александр
04.04.2017
10:38:28
а проц какой?

Александр
04.04.2017
10:38:55
для ranch сколько слушающих процессов?
что-то мало ((

Константин
04.04.2017
10:39:23
def start_link(port) do
{:ok, _} = :ranch.start_listener(
:teaser_view, 10000,
:ranch_tcp, [port: port, max_connections: :infinity, backlog: 100000],
TeaserView.Handler, []
)
end
i7-6700
https://ark.intel.com/ru/products/88196/Intel-Core-i7-6700-Processor-8M-Cache-up-to-4_00-GHz
вот этот

Александр
04.04.2017
10:42:46
10тыс много, у меня с 100 - 45К rps выдаёт
и проц уменя Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
а кинь серверную часть

Google

Александр
04.04.2017
10:42:58
я у себя погоняю

shadowjack
04.04.2017
10:45:30

Александр
04.04.2017
10:45:44
ааа
ну да, согласен

shadowjack
04.04.2017
10:47:12
Получается latency 100 uS. По-моему очень даже неплохо.

Константин
04.04.2017
10:48:26
Да, клиент создает, пишет и закрывает соединение. Теперь надо многопоточно проверить)
штук так в 500

Admin
ERROR: S client not available

shadowjack
04.04.2017
10:50:07
Используй wrk если хочешь сервер проверить.

Константин
04.04.2017
10:50:50
ок, попробую
погоди, но он http тестирует
а мне то tcp надо

Александр
04.04.2017
10:54:16
тебе вообще amqp надо тестировать
насколько я помню
tsung умеет

Константин
04.04.2017
10:54:46
не, это уже другая тема
я тогда писал на udp, но потери пакетов были приличные
вот решил на tcp перейти
хочу сделать сборщик данных
Есть большой поток обращений в php скрипты, там пока все справляется хорошо. Но надо писать лог в базу из них. Чтобы не нагружать систему кучей запросов - лучше сделать сбор в одном месте и раз в 10 сек записывать все данные. Это можно сделать и через редис, но есть косяк в предварительной обработке этих данных. Эликсир декодирует json строки и делает все необходимые изменения с офигительной скоростью через flow и может в отдельном процессе вставлять данные в базу.

Google

shadowjack
04.04.2017
11:02:06
может тогда iperf/iperf3?

Александр
04.04.2017
11:03:16
может готовый https://www.elastic.co/products/logstash взять?
ну и весь стек притянуть
можно и анлизировать будет быстро

Константин
04.04.2017
11:03:43
нужна запись в clickhouse
Для аналитики замечательно подходит
и у него прикол, что данные лучше вставлять пачками по >1000 элементов
следовательно такое решение наиболее правильное. Мы собираем кучу данных, через flow подготавливаем и обрабатываем. Потом всей толпой засовываем в clickhouse

Vladimir
04.04.2017
11:06:42

Александр
04.04.2017
11:06:59
а где можно посмотреть какие графики выдаёт?

Vladimir
04.04.2017
11:07:02
Самим писать несложно, но этож писать надо

Александр
04.04.2017
11:07:07
или там отдельно визуализация?

Константин
04.04.2017
11:07:07
http интерфейс ведь есть

Vladimir
04.04.2017
11:07:23
то http, а то api

Константин
04.04.2017
11:07:27
визуализацию самому писать

Vladimir
04.04.2017
11:07:33
для CouchDB тоже всё по http, однако апи гораздо удобнее
CouchDB API для Clojure кстати весьма крутое.

Александр
04.04.2017
11:08:22
у вас как у яндекса/гугла миллиарды сообщений в месяц проходят?