Abusive WebSocket test getting an Exception
Posted: Thu Mar 03, 2022 7:15 am
I am running some overly abusive tests on my project. The current test in question is a server, serving four WebSockets. I am trying to push data out (small messages < 50 bytes each) as fast as possible. At any rate below say around 3 KB/sec each (12 KB/sec total) the sever and clients will merrily work far longer than I have patience to test... I use 100 hours as a cutoff for a successful test and of my patience.
I've bumped up the send rate to 1000 sends/socket/second. I don't know if its just coincidence, but the the byte rate per socket is hovering right around 2^15 = 32KB/sec. I've run this test a couple of times since it fails in relatively short order. The last one took only 47 minutes to fail. I'm well past trivial things like memory leaks as over 270 MB have been pushed out.
I started searching the Internet about the exception I get and ran across - Ets intr lock nest (#6484)
https://git.riper.fr/ext/esp8266/commit/d8531cb2c4aec39d917fed8d642afe86af59e1c6
I'm not sure what this is supposed to be telling me... Its a little more Advanced than I know.
Here is the Exception Decoder Output. The first line of code that I actually wrote is about 5 lines up from the bottom. What I noted was the article listed above mentioned some arbitrary count of 7 that sounds like they didn't expect this to ever reach it and yet I see three blocks of 7 calls to this function. So, I think I hitting this magic number. I just don't know what that is suppose to be telling me or how I go about fixing it.
Any help is greatly appreciated.
I've bumped up the send rate to 1000 sends/socket/second. I don't know if its just coincidence, but the the byte rate per socket is hovering right around 2^15 = 32KB/sec. I've run this test a couple of times since it fails in relatively short order. The last one took only 47 minutes to fail. I'm well past trivial things like memory leaks as over 270 MB have been pushed out.
I started searching the Internet about the exception I get and ran across - Ets intr lock nest (#6484)
https://git.riper.fr/ext/esp8266/commit/d8531cb2c4aec39d917fed8d642afe86af59e1c6
I'm not sure what this is supposed to be telling me... Its a little more Advanced than I know.
Here is the Exception Decoder Output. The first line of code that I actually wrote is about 5 lines up from the bottom. What I noted was the article listed above mentioned some arbitrary count of 7 that sounds like they didn't expect this to ever reach it and yet I see three blocks of 7 calls to this function. So, I think I hitting this magic number. I just don't know what that is suppose to be telling me or how I go about fixing it.
Any help is greatly appreciated.
Code: Select all
Exception 29: StoreProhibited: A store referenced a page mapped with an attribute that does not permit stores
PC: 0x4000e1c3
EXCVADDR: 0x00000018
Decoding stack results
0x40100a30: malloc(size_t) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 821
0x40100c9e: calloc(size_t, size_t) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 1181
0x40100c90: calloc(size_t, size_t) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 1176
0x40100827: umm_free_core(umm_heap_context_t*, void*) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 549
0x402053fa: loop_task(ETSEvent*) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 213
0x401009e0: umm_init() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 476
0x401000ac: app_entry_redefinable() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 325
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x40100164: ets_intr_unlock() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 167
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4020dd9a: __d2b at /workdir/repo/newlib/newlib/libc/stdlib/mprec.c line 809
0x4020c454: _dtoa_r at /workdir/repo/newlib/newlib/libc/stdlib/dtoa.c line 515
0x4020dd46: __d2b at /workdir/repo/newlib/newlib/libc/stdlib/mprec.c line 779
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x402091fb: _printf_float at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf_float.c line 330
0x4020ca61: _dtoa_r at /workdir/repo/newlib/newlib/libc/stdlib/dtoa.c line 853
0x4020df54: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 182
0x4020e018: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 232
0x4020e018: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 232
0x4020df54: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 182
0x40209908: _printf_i at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf_i.c line 246
0x4020df54: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 182
0x4020e018: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 232
0x4020e469: _svfprintf_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 662
0x4020df54: __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 182
0x4020e469: _svfprintf_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c line 662
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x40206d4d: run_scheduled_functions() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/core_esp8266_features.h line 66
0x40205579: __loop_end() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 188
0x401002a1: millis() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring.cpp line 193
0x4022c210: InqPortal::send(char const*, ...) at A:\libraries\Inq\src\InqPortal.cpp line 373
0x4020126a: sendTemperature(void*) at A:\WSTest/WSTest.ino line 51
0x4010018c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 181
0x401001ad: esp_schedule() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 128
0x402055c2: loop_wrapper() at C:\Users\Dennis\Documents\ArduinoIDE\arduino-1.8.16\portable\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 205