wg / wrk

Modern HTTP benchmarking tool
Other
37.23k stars 2.91k forks source link

PANIC: unprotected error in call to Lua API (attempt to index a nil value) #298

Open centminmod opened 6 years ago

centminmod commented 6 years ago

I install Wrk via git clone on CentOS 7.4 64bit systems. Usually it works fine except for one system I get the following error when running wrk with parameters

PANIC: unprotected error in call to Lua API (attempt to index a nil value)
wrk -v
wrk 4.0.2-2-g91655b5 [epoll] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>                            
  Options:                                            
    -c, --connections <N>  Connections to keep open   
    -d, --duration    <T>  Duration of test           
    -t, --threads     <N>  Number of threads to use   

    -s, --script      <S>  Load Lua script file       
    -H, --header      <H>  Add header to request      
        --latency          Print latency statistics   
        --timeout     <T>  Socket/request timeout     
    -v, --version          Print version details      

  Numeric arguments may include a SI unit (1k, 1M, 1G)
  Time arguments may include a time unit (2s, 2m, 2h)
 ldd wrk
        linux-vdso.so.1 =>  (0x00007ffd9215e000)
        libluajit-5.1.so.2 => /opt/wrk-luajit/lib/libluajit-5.1.so.2 (0x00007f774201a000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7741ded000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f7741aeb000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f77418e7000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f7741523000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f774130d000)
        /lib64/ld-linux-x86-64.so.2 (0x000055f9372b6000)
/opt/wrk-openssl/bin/openssl version -a
OpenSSL 1.1.0f  25 May 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
compiler: ccache gcc -DZLIB -DZLIB_SHARED -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_DYNAMIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/opt/wrk-openssl\"" -DENGINESDIR="\"/opt/wrk-openssl/lib/engines-1.1\""  -Wa,--noexecstack
OPENSSLDIR: "/opt/wrk-openssl"
ENGINESDIR: "/opt/wrk-openssl/lib/engines-1.1"

I installed using following steps on all systems that are working as well

OPENSSL_VERSION='1.1.0f'
rm -rf /svr-setup/wrk-openssl
mkdir -p /svr-setup/wrk-openssl
cd /svr-setup/wrk-openssl
wget -cnv https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
tar xvzf openssl-${OPENSSL_VERSION}.tar.gz
cd openssl-${OPENSSL_VERSION}
OPENSSL_CUSTOMPATH='/opt/wrk-openssl'
export STATICLIBSSL="${OPENSSL_CUSTOMPATH}"
LIBRPATH='/opt/wrk-openssl/lib'
./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)' --prefix=$STATICLIBSSL --openssldir=$STATICLIBSSL no-shared zlib-dynamic
make -j2
make install_ssldirs
make install_sw
\cp -Rpf /etc/ssl/certs/* /opt/wrk-openssl/certs/

cd /svr-setup
rm -rf /svr-setup/wrk-luajit
git clone http://luajit.org/git/luajit-2.0.git wrk-luajit
cd wrk-luajit
make -j2 PREFIX=/opt/wrk-luajit
make install PREFIX=/opt/wrk-luajit
MAJVER=$(awk -F "=  " '/MAJVER=  / {print $2}' Makefile)
MINVER=$(awk -F "=  " '/MINVER=  / {print $2}' Makefile)
RELVER=$(awk -F "=  " '/RELVER=  / {print $2}' Makefile)
PREREL=$(awk -F "=  " '/PREREL=  / {print $2}' Makefile)
rm -rf /opt/wrk-luajit/bin/luajit
ln -sf /opt/wrk-luajit/bin/luajit-${MAJVER}.${MINVER}.${RELVER}${PREREL} /opt/wrk-luajit/bin/luajit

cd /svr-setup
rm -rf /svr-setup/wrk
git clone https://github.com/wg/wrk
cd wrk
export PATH=$PATH:/opt/wrk-luajit/bin
export LDFLAGS='-Wl,-rpath,/opt/wrk-luajit/lib'
make WITH_LUAJIT=/opt/wrk-luajit WITH_OPENSSL=/opt/wrk-openssl
\cp -af wrk /usr/local/bin/wrk
dantti commented 6 years ago

I'm getting this error using wrk package from Ubuntu 18.04 which is also 4.0.2-2 version, did you manage to make it work?

centminmod commented 6 years ago

i just use make these days works on my forked wrk branch

Xplouder commented 5 years ago

Experiencing this with Mint 19

giovibal commented 5 years ago

I'm getting this error using wrk package from Ubuntu 18.04 which is also 4.0.2-2 version, did you manage to make it work?

me too

landon30 commented 5 years ago

i occurs the runtime error,but i solved

  1. ensure the compile-make luajit is same with the ldd dependency luajit
  2. it occurs when the system LD_LIBRARY_PATH has a luajit,this luajit is not same with the compile luajit
deric commented 4 years ago

Same issue on Debian 9:

Package: wrk                             
Version: 4.0.2-2~deb9u1
State: installed
Automatically installed: no
Priority: optional
Section: web
Maintainer: Robert Edmonds <edmonds@debian.org>
Architecture: amd64
Uncompressed Size: 116 k
Depends: libc6 (>= 2.14), libluajit-5.1-2, libssl1.1 (>= 1.1.0)
Description: HTTP benchmarking tool
 wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design
 with scalable event notification systems such as epoll and kqueue. 

 An optional LuaJIT script can perform HTTP request generation, response processing, and custom reporting.
Homepage: https://github.com/wg/wrk

ldd:

ldd /usr/bin/wrk
        linux-vdso.so.1 (0x00007fff71b94000)
        libluajit-5.1.so.2 => /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2 (0x00007f1b1ca8b000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1b1c86e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1b1c56a000)
        libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f1b1c0d0000)
        libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f1b1be64000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1b1bac5000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1b1b8c1000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1b1b6aa000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f1b1cf18000)

luajit:

aptitude show libluajit-5.1-2
Package: libluajit-5.1-2                 
Version: 2.1.0~beta3+dfsg-5.1~bpo9+1
State: installed
Automatically installed: no
Multi-Arch: same
Priority: optional
Section: interpreters
Maintainer: Enrico Tassi <gareuselesinge@debian.org>
Architecture: amd64
Uncompressed Size: 528 k
Depends: libluajit-5.1-common (= 2.1.0~beta3+dfsg-5.1~bpo9+1), libc6 (>= 2.14), libgcc1 (>= 1:3.3)

On Debian 9, the default libluajit-5.1-2 version is 2.0.4+dfsg-1+b1. If you're running on backports luajit (2.1.0~beta3+dfsg-5.1~bpo9+1), you need to recompile wrk.

defanator commented 3 years ago

I'm getting the same on macos with clang-12 after stripping the binary:

$ file wrk
wrk: Mach-O 64-bit executable x86_64
$ otool -L wrk
wrk:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
    /opt/pkg/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
    /opt/pkg/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
$ ./wrk -c 1 -t 1 http://localhost
unable to connect to localhost:http Connection refused
$ strip wrk
$ ./wrk -c 1 -t 1 http://localhost
PANIC: unprotected error in call to Lua API (attempt to index a nil value)

Have no idea what's the real reason. I'm building wrk with static LuaJIT, and I don't have any LuaJIT libs in the system.

UDPATE: it is failing in https://github.com/wg/wrk/blob/master/src/script.c#L102:

$ nm wrk.orig | fgrep luaJIT_BC
0000000100080460 S _luaJIT_BC_wrk
$ nm wrk.stripped | fgrep luaJIT_BC
$ 

Looks interesting.

niT-Tin commented 2 years ago

i occurs the runtime error,but i solved

  1. ensure the compile-make luajit is same with the ldd dependency luajit
  2. it occurs when the system LD_LIBRARY_PATH has a luajit,this luajit is not same with the compile luajit

this do solve my problem!

KangoV commented 8 months ago

Still happening in Ubuntu 23.10 :(

insinfo commented 8 months ago

@centminmod Thanks your fork is working on WSL https://github.com/centminmod/wrk/tree/centminmod

I've been receiving some messages, I don't know if this is normal

unable to record connect unable to record connect unable to record first byte metrics unable to record first byte metrics

josecelano commented 4 months ago

Same problem here with this script.

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 23.04
Release:        23.04
Codename:       lunar