LINUX.ORG.RU

Клиенты не доходят до сервера


0

1

http://dumpz.org/1030969/ - исходники недосервера

Тестирую через ab:

azq2@zhumarin:~/проекты/ololo$ ab -n200000 http://127.0.0.1:1488/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 20000 requests
Completed 40000 requests
Completed 60000 requests
Completed 80000 requests
Completed 100000 requests
Completed 120000 requests
Completed 140000 requests
Completed 160000 requests
Completed 180000 requests
apr_poll: The timeout specified has expired (70007)
Total of 189744 requests completed

Почему оно внезапно падает по таймауту? До сервера просто не доходят коннекты, висит на __accept_nocancel

Как только не пробовал. Виснет постоянно на одном и том же месте. (кол-ве запросов) И только с моим недосервером.


А ты, однако, Джигурда ☺

Eddy_Em ☆☆☆☆☆
()

А что netstat показывает на сервере, случайно нет кучи недозакрытых соединений?

mashina ★★★★★
()
Ответ на: комментарий от mashina
tcp        0      0 zhumarin:1488           zhumarin:39501          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:38834          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:48808          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:53776          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:49756          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:41133          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:49693          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:47810          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:33926          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:40964          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:36113          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:58490          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:32982          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:43985          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:52475          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:43985          TIME_WAIT  
tcp        0      0 zhumarin:1488           zhumarin:52475          TIME_WAIT

Очень много таких после виса.

Azq2
() автор топика

Выбросьте все shutdown-ы, а так же выбросьте
send(client, html, sizeof(html) - 1, 0);
или раскомментируйте чтенческую часть (кроме printf).
Очень может быть, что SO_REUSEADDR и TCP_NODELAY не переходят
со слушающего на рабочий сокет, и стало быть, бесполезны.
И Вы так позаботились о распечатке возможных ошибок при создании
слушающего сокета, и ни одной распечатки ошибок в рабочем цикле.
Так не бывает.
Не знаю, что это за тестовый клиент, может он просто заваливает запросами,
и сервер не справляется с нагрузкой. Очередь запросов можно увеличить:
listen(sock, 5) вместо listen(sock, 1).

oleg_2
()

И вот это добавьте
signal(SIGPIPE, SIG_IGN);

oleg_2
()
Ответ на: комментарий от Azq2

Видимо, закончились порты/ресурсы, состояния TCP сокетов не успевают освобождаьться с нужным рейтом, см. Нужно делать keep-alive в http и позволять через одно соединение делать несколько запросов, либо грузить сервер с нескольких айпи.

mashina ★★★★★
()

И еще, только что догадался, если раскомментируете чтенческую часть,
то цикл чтения не надо, просто один раз recv, и всё, а то не получится.

oleg_2
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.