Как я могу сравнить приложение Node.js на базе веб-сокета? - PullRequest
14 голосов
/ 23 апреля 2011

Я тестирую масштабируемость приложения websockets, которое я написал, используя socket.io и Node.js.Я хочу провести стресс-тест и оценить производительность.Какие инструменты я могу использовать?

До сих пор я изучал wsbench , но я хотел бы изучить любые альтернативы.

Ответы [ 4 ]

10 голосов
/ 04 февраля 2012

Провел день, изучая бенчмаркинг node.js и socket.io. Я попробовал несколько решений и обнаружил, что вы не можете использовать wsbench для тестирования socket.io, так как socket.io имеет свой собственныйпротокол, который должен быть адресован для установления соединений.

После неудачных попыток нескольких других решений я использовал socket.io-benchmark , и я просто установил 60 000 подключений на m1. Большой экземпляр EC2, использующий только одно ядро ​​с запасом места.В моем случае я только хотел измерить издержки соединений socket.io (что потребовало от меня закомментировать некоторый код в socket.io-benchmark), чтобы не было сообщений между клиентом и сервером.

Интересно было видеть, что клиенты занимают больше ЦП и памяти, чем сервер.Поэтому убедитесь, что клиентский сервер, на котором вы производите тестирование, работает некорректно, я использовал EC2 c1.xlarge и у меня было много свободного места.И я разбил бенчмарк на 6 отдельных процессов, чтобы он мог масштабироваться по нескольким ядрам и избегать ограничений памяти.

Будьте осторожны, чтобы установить параметр <rampup in seconds> достаточно высокий на клиентах, если вы установите его на низкий уровень всегобуферы и шлифовки, чтобы остановить.

Единственная проблема с socket.io-benchmark состоит в том, что мне пришлось использовать узел v0.4.12, чтобы заставить его работать, из-за зависимости от v8-profiler, которая не будет компилироваться в более новых версиях узла (по состоянию назапись).

4 голосов
/ 24 апреля 2011

Существует очень простая реализация клиента Socket.IO для Node.js.Это не настоящий инструмент для тестирования производительности, но он знает о протоколе Socket.IO.

Используя его, довольно легко написать клиент, который взаимодействует с вашим приложением.

3 голосов
/ 25 марта 2014

https://www.npmjs.org/package/thor

Это утилита командной строки, вывод которой аналогичен Apache Bench


Thor:                                                  version: 1.0.0

God of Thunder, son of Odin and smasher of WebSockets!

Thou shall:
- Spawn 1 workers.
- Create 2 concurrent/parallel connections.
- Smash 100 connections with the mighty Mjölnir.

The answers you seek shall be yours, once I claim what is mine.

Connecting to ws://server:8080/examples/websocket/chat

  Opened 100 connections


Online               439 milliseconds
Time taken           441 milliseconds
Connected            100
Disconnected         0
Failed               55
Total transferred    132.62kB
Total received       71.85kB

Durations (ms):

                     min     mean     stddev  median max
Handshaking          1       5             3       4 20
Latency              0       0             1       0 3

Percentile (ms):

                      50%     66%     75%     80%     90%     95%     98%     98%    100%
Handshaking          4       5       5       6       7       11      17      20      20
Latency              0       0       1       1       1       1       1       2       3
0 голосов
/ 13 апреля 2012

Для сравнительного анализа количества одновременных подключений я бы порекомендовал wsbench . Однако это не будет работать для сайтов Socket.IO (потому что более сложное рукопожатие). Я исследовал его и нашел несколько инструментов, которые просто устанавливают соединения с сервером Socket.IO. Этого недостаточно для измерения реальной производительности. Что вам нужно, это отправлять и получать реальные сообщения, которые имитируют реального клиента вашего веб-приложения. Я описал некоторые идеи о том, как создать свой собственный тест: Сравнительный анализ для сайтов Node.JS / Socket.IO

...