httpd segfault内存泄漏?

时间:2018-06-20 18:24:37

标签: ssl memory segmentation-fault

我有一个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]

0 个答案:

没有答案