@calculator212

Как можно измерить производительность http сервера?

Прочитал статью там почти любой сервер может обработать 3-4 тыс. запрос за секунду и больше.

Я решил провести небольшое нагрузочное тестирование на таком сервере. Но результаты тестирования меня удивили. Показано всего 10 rps. Причём сервер на asio(c++) показал такие же результаты. И я пришел к выводу, что я скорее всего неправильно тестирую. Поэтому прошу мне помочь о объяснить как правильно можно проверить, какую нагрузку выдержит сервер.

Тестировал так

siege -t10S -v 127.0.0.1:8080

результаты
Response time: 2.26 secs
Transaction rate: 10.63 trans/sec
Throughput: 0.06 MB/sec

package main

import (
	"log"
	"net/http"
)

func main() {

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(200)
		w.Write([]byte("Hello"))
	})

	log.Fatal(http.ListenAndServe(":8080", nil))

}
  • Вопрос задан
  • 420 просмотров
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Для подобного тестового кода можно использовать ab (Apache HTTP server benchmarking tool)

Например так
ab -n 10000 -c 1000 http://localhost:8080/

Где:
-n это количество запросов, которое нужно сделать
-с это количество одновременных запросов

Запустил у себя на одном из серверов, результат вот такой
Server Software:
Server Hostname:        localhost
Server Port:            8080

Document Path:          /
Document Length:        5 bytes

Concurrency Level:      1000
Time taken for tests:   0.509 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1210000 bytes
HTML transferred:       50000 bytes
Requests per second:    19627.39 [#/sec] (mean)
Time per request:       50.949 [ms] (mean)
Time per request:       0.051 [ms] (mean, across all concurrent requests)
Transfer rate:          2319.25 [Kbytes/sec] received

Т.е. при 1000 одновременных запросов сервер сможет обрабатывать в среднем 19627 запросов в секунду

Но важно понимать, что в реальном проекте у вас будет не один endpoint, и что каждый endpoint, в зависимости от того, что он будет делать - будет показывать разный RPS.

Например если сейчас вы добавите еще один endpoint и будете делать запросы в базу для формирования ответа - RPS будет значительно меньше.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы