Kestrel зависает при тестировании с одновременным ab [duplicate]

В основном в Mysql, эти типы идентификаторов используются в запросах `, ", ' и ().

  1. " или ' используйте для включения строки как значения "26-01-2014 00:00:00" или '26-01-2014 00:00:00'. Этот идентификатор используется только для строковой неагрегатной функции, такой как now() or sum ,max и т. Д.
  2. ` использовать для включения таблицы таблицы или таблицы, например. выберите column_name из table_name, где id = '2'
  3. () используются только для того, чтобы просто заключить части запроса, например. выберите column_name из table_name где (id = '2' и gender = 'male') или name = 'rakesh'.
36
задан Paul Sweatte 25 April 2014 в 03:17
поделиться

2 ответа

Похоже, что у вас заканчиваются эфемерные порты . Чтобы проверить, используйте команду netstat и найдите несколько тысяч портов в состоянии TIME_WAIT .

В Mac OS X используется эфемер по умолчанию диапазон портов составляет от 49152 до 65535, в общей сложности 16384 порта. Вы можете проверить это с помощью команды sysctl :

$ sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535

Как только вы закончите эфемерные порты, вам, как правило, нужно подождать, пока истечет срок действия TIME_WAIT ( 2 * максимальное время жизни сегмента), пока вы не сможете повторно использовать определенный номер порта. Вы можете удвоить количество портов, изменив диапазон, чтобы начать с 32768, что по умолчанию используется для Linux и Solaris. (Максимальный номер порта - 65535, поэтому вы не можете увеличить высокий уровень.)

$ sudo sysctl -w net.inet.ip.portrange.first=32768
net.inet.ip.portrange.first: 49152 -> 32768

Обратите внимание, что официальный диапазон , обозначенный IANA , составляет 49152 - 65535, а некоторые брандмауэры могут предположим, что динамически назначенные порты попадают в этот диапазон. Возможно, вам понадобится перенастроить ваш брандмауэр, чтобы использовать больший диапазон вне вашей локальной сети.

Также можно сократить максимальное время жизни сегмента (sysctl net.inet.tcp.msl в Mac OS X), что контролирует продолжительность состояния TIME_WAIT, но это опасно, так как это может привести к смешению старых соединений с более новыми, которые используют один и тот же номер порта. Существуют также некоторые трюки, связанные с привязкой к конкретным портам с опцией SO_REUSEADDR или закрытием с помощью опции SO_LINGER, но также могут быть смешаны старые и новые соединения, поэтому обычно считаются плохими идеями.

50
ответ дан mark4o 24 August 2018 в 03:02
поделиться

Вместо увеличения количества портов измените длину TIME_WAIT в Mac OS X.

Это работает только в разработке, но теперь я могу спросить ab, сколько запросов

Установите время ожидания по умолчанию на 1000 мс следующим образом:

$ sudo sysctl -w net.inet.tcp.msl=1000
net.inet.tcp.msl: 15000 -> 1000

Страница brianp.net, указанная в другом ответе, больше не доступна. Вы можете получить его из интернет-архива .

23
ответ дан Frederik 24 August 2018 в 03:02
поделиться
Другие вопросы по тегам:

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