testing - Error de falla de segmentación de httperf en OS X 10.7.1
load (3)
Como lo indica la advertencia, el número de conexiones al servidor http excede la cantidad máxima de descriptores de archivos abiertos permitidos. Es probable que aunque httperf
limite el valor a FD_SETSIZE, esté llegando más allá de ese límite.
Puede verificar el valor límite con 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
Intente aumentar el límite con 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
Esta es una práctica común en servidores web grandes y similares, ya que un socket es esencialmente solo un descriptor de archivo abierto.
Cuando intento realizar una prueba de carga usando httperf con alta tasa de solicitud, aparece el siguiente error:
» 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**
El error aumenta cuando la "tasa" es> 15
Versiones:
httperf 0.9.0
OS X 10.7.1
Intenta usar gdb
y usa algo como:
$ 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
Esto invocará gdb
y debería ver un aviso (gdb)
.
Entonces: run
y entra.
Si se bloquea, escribe bt
(backtrace). Investigue y / o comparta aquí.
ksh
y bash
están usando ulimit , y csh
está usando el comando de límite .