Ошибка ошибки сегментации httperf на OS X 10.7.1
Когда я пытаюсь выполнить нагрузочный тест с использованием httperf с высокой частотой запросов, я получаю следующую ошибку:
» httperf --client=0/1 --server=www.xxxxx.com --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=200 --rate=30
httperf --client=0/1 --server=staging.truecar.com --port=80 --uri=/ --rate=30 --send-buffer=4096 --recv-buffer=16384 --num-conns=200 --num-calls=1
httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE
**Segmentation fault: 11**
Ошибка возникает, когда "скорость"> 15
Версии:
httperf 0.9.0
OS X 10.7.1
3 ответа
Как говорится в предупреждении, количество подключений к http-серверу превышает максимально допустимое количество открытых файлов-дескрипторов. Вполне вероятно, что даже если httperf
ограничивает значение до FD_SETSIZE, вы достигнете этого предела.
Вы можете проверить предельное значение с ulimit -a
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
Попробуйте увеличить лимит с ulimit -n <n>
$ ulimit -n 2048
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
Это обычная практика на больших веб-серверах и т. П., Поскольку сокет - это просто открытый дескриптор файла.
Попробуй использовать gdb
и использовать что-то вроде:
$ gdb httperf --client=0/1 --server=staging.truecar.com \
--port=80 --uri=/ --rate=30 --send-buffer=4096 \
--recv-buffer=16384 --num-conns=200 --num-calls=1
Это вызовет gdb
и вы должны увидеть (gdb)
незамедлительный.
Затем: run
и войти.
Если произойдет сбой, введите bt
(Трассировка). Расследовать и / или поделиться здесь.
ksh
а также bash
используете ulimit, и csh
использует команду limit.