我有一个apache服务器,该服务器为我的移动应用程序提供一些REST API。我的error_log中出现分段错误,并注意到我所有的Apache进程都逐渐建立到最大内存,直到其中一个崩溃。我生成了一个核心转储,但是我不确定如何从这里继续查找问题。
以下是段错误的回溯信息:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `/usr/sbin/httpd'.
Program terminated with signal 11, Segmentation fault.
#0 __GI___libc_free (mem=0x8000000000001505) at malloc.c:2935
2935 if (chunk_is_mmapped(p)) /* release mmapped memory. */
(gdb) backtrace ful
#0 __GI___libc_free (mem=0x8000000000001505) at malloc.c:2935
ar_ptr = <optimized out>
p = <optimized out>
hook = 0x0
#1 0x00007f649c52558d in CRYPTO_free (str=0x8000000000001505) at mem.c:434
No locals.
#2 0x00007f649c968e6c in kssl_ctx_free (kssl_ctx=0x55dbe56abac0) at kssl.c:1553
No locals.
#3 0x00007f649c95a7be in SSL_free (s=0x55dbe59f4750) at ssl_lib.c:657
s = 0x55dbe59f4750
i = <optimized out>
#4 0x00007f6494a3841e in ssl_filter_io_shutdown (c=0x7f6470042498, abortive=abortive@entry=0, filter_ctx=0x7f6470042b38) at ssl_engine_io.c:1111
ssl = 0x55dbe59f4750
type = 0x7f6494a4d8ff "standard"
sslconn = 0x7f6470042aa8
shutdown_type = <optimized out>
loglevel = 7
logno = 0x7f6494a4d8f5 "AH02001: "
#5 0x00007f6494a39968 in ssl_io_filter_output (f=0x7f6470042b90, bb=0x7f6448086a80) at ssl_engine_io.c:1768
bucket = 0x7f64480815f8
status = 0
filter_ctx = 0x7f6470042b38
inctx = <optimized out>
outctx = 0x7f6470042bb8
rblock = APR_NONBLOCK_READ
#6 0x00007f6494a3696a in ssl_io_filter_coalesce (f=0x7f6470042b68, bb=0x7f6448086a80) at ssl_engine_io.c:1725
e = <optimized out>
upto = <optimized out>
bytes = <optimized out>
ctx = <optimized out>
count = <optimized out>
#7 0x000055dbe3ab9d33 in ap_shutdown_conn (c=c@entry=0x7f6470042498, flush=flush@entry=1) at connection.c:88
rv = <optimized out>
bb = 0x7f6448086a80
b = <optimized out>
#8 0x000055dbe3ab9ded in ap_flush_conn (c=0x7f6470042498) at connection.c:95
No locals.
#9 ap_start_lingering_close (c=0x7f6470042498) at connection.c:145
csd = 0x7f64700421f0
#10 0x00007f6496ee6935 in start_lingering_close_blocking (cs=0x7f64700423f0) at event.c:804
csd = 0x7f64700421f0
#11 process_socket (thd=thd@entry=0x7f647000dfa8, p=<optimized out>, sock=<optimized out>, cs=0x7f64700423f0, my_child_num=my_child_num@entry=3,
my_thread_num=my_thread_num@entry=24) at event.c:1208
c = <optimized out>
conn_id = <optimized out>
clogging = <optimized out>
rv = <optimized out>
rc = <optimized out>
#12 0x00007f6496ee7f44 in worker_thread (thd=0x7f647000dfa8, dummy=<optimized out>) at event.c:2122
csd = 0x7f64700421f0
cs = 0x0
te = 0x0
ptrans = 0x7f6470042168
ti = <optimized out>
process_slot = 3
thread_slot = 24
rv = <optimized out>
is_idle = 0
---Type <return> to continue, or q <return> to quit---4quit
#13 0x00007f64a1e67de5 in start_thread (arg=0x7f6465feb700) at pthread_create.c:308
__res = <optimized out>
pd = 0x7f6465feb700
now = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140069184648960, -942004111543201317, 0, 8392704, 0, 140069184648960, 875281337744003547, 874850120260686299},
mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
pagesize_m1 = <optimized out>
sp = <optimized out>
freesize = <optimized out>
#14 0x00007f64a198dbad in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113
No locals.
对我来说幸运的是,这并没有真正影响我的应用程序的基本功能,因此它仍然可以正常运行,只是它会不时断开用户连接(同样不会影响用户体验)
我尚未配置MPM设置,例如KeepAliveTimeout或maxconnections或其他任何设置。
我当时想通过更改一些MPM config id可以缓解此问题,但我不想让情况变得更糟。
感谢任何指导或帮助。我正在使用Apache 2.4.33
@编辑 segfault之后,我现在在error_log中得到以下回溯
*** Error in `/usr/sbin/httpd': malloc(): memory corruption (fast): 0x000055dbe5917241 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7f5e4)[0x7f64a190e5e4]
/lib64/libc.so.6(+0x82d00)[0x7f64a1911d00]
/lib64/libc.so.6(__libc_malloc+0x4c)[0x7f64a191484c]
/lib64/libcrypto.so.10(CRYPTO_malloc+0x58)[0x7f649c525338]
/lib64/libcrypto.so.10(X509_VERIFY_PARAM_new+0x82)[0x7f649c61e9b2]
/lib64/libssl.so.10(SSL_new+0x18c)[0x7f649c95a99c]
/etc/httpd/modules/mod_ssl.so(+0xd094)[0x7f6494a2f094]
/usr/sbin/httpd(ap_run_pre_connection+0x4b)[0x55dbe3ab9b6b]
/etc/httpd/modules/mod_mpm_event.so(+0x6d90)[0x7f6496ee6d90]
/etc/httpd/modules/mod_mpm_event.so(+0x7f44)[0x7f6496ee7f44]
/lib64/libpthread.so.0(+0x7de5)[0x7f64a1e67de5]
/lib64/libc.so.6(clone+0x6d)[0x7f64a198dbad]