ฉันใช้แพ็คเกจ httpd24u จาก ไอยูส บนเซิร์ฟเวอร์ Centos 7 สองเครื่อง ตัวระบุเวอร์ชันสำหรับแพ็คเกจคือ "2.4.52-1.el7.ius"
ในช่วงสัปดาห์ที่ผ่านมา เราพบการตอบกลับ HTTP ที่เสียหายเป็นระยะๆ จากเซิร์ฟเวอร์ เบราว์เซอร์รายงาน "net::ERR_CONNECTION_CLOSED" และบันทึกข้อผิดพลาดของเซิร์ฟเวอร์มีเอาต์พุตเช่น:
*** ข้อผิดพลาดใน `/usr/sbin/httpd': ฟรี(): ขนาดถัดไปไม่ถูกต้อง (รวดเร็ว): 0x00007fb394015f10 ***
======= ย้อนหลัง: =========
/lib64/libc.so.6(+0x81329)[0x7fb3cf231329]
/lib64/libcrypto.so.10(CRYPTO_free+0x1d)[0x7fb3c7b1396d]
/lib64/libcrypto.so.10(EVP_MD_CTX_cleanup+0xe9)[0x7fb3c7bd0a69]
/lib64/libcrypto.so.10(+0x1275ee)[0x7fb3c7bcc5ee]
/lib64/libssl.so.10(ssl23_accept+0x39)[0x7fb3c7f37409]
/etc/httpd/modules/mod_ssl.so(+0x18352)[0x7fb3c0122352]
/etc/httpd/modules/mod_ssl.so(+0x19ed6)[0x7fb3c0123ed6]
/etc/httpd/modules/mod_ssl.so(+0xdad0)[0x7fb3c0117ad0]
/usr/sbin/httpd(ap_run_process_connection+0x40)[0x55a2b89abe10]
/etc/httpd/modules/mod_mpm_event.so(+0x714a)[0x7fb3c25db14a]
/etc/httpd/modules/mod_mpm_event.so(+0x7d9e)[0x7fb3c25dbd9e]
/lib64/libpthread.so.0(+0x7ea5)[0x7fb3cf789ea5]
/lib64/libc.so.6(โคลน+0x6d)[0x7fb3cf2aeb0d]
======= แผนที่หน่วยความจำ: ========
55a2b8955000-55a2b89e1000 r-xp 00000000 08:03 1879095252 /usr/sbin/httpd
55a2b8be0000-55a2b8be3000 r--p 0008b000 08:03 1879095252 /usr/sbin/httpd
55a2b8be3000-55a2b8be5000 rw-p 0008e000 08:03 1879095252 /usr/sbin/httpd
55a2b8be5000-55a2b8be9000 rw-p 00000000 00:00 0
55a2b9fea000-55a2ba3a0000 rw-p 00000000 00:00 0 [กอง]
55a2ba3a0000-55a2ba46c000 rw-p 00000000 00:00 0 [กอง]
7fb34c000000-7fb34c021000 rw-p 00000000 00:00 0
7fb34c021000-7fb350000000 --- พี 00000000 00:00 0
7fb354000000-7fb354074000 rw-p 00000000 00:00 0
7fb354074000-7fb358000000 --- พี 00000000 00:00 0
7fb358000000-7fb358021000 rw-p 00000000 00:00 0
(แผนที่หน่วยความจำดำเนินต่อไปหลายหน้า)
ฉันไม่ทราบวิธีตีความข้อความแสดงข้อผิดพลาดนี้ ฉันได้เรียนรู้ว่า "free(): invalid next size" บ่งชี้ถึงข้อผิดพลาดของหน่วยความจำ (พยายาม ฟรี()
หน่วยความจำที่ไม่ได้จัดสรรหรือ double-ฟรี()
อยู่ในความทรงจำเดียวกัน)
มีเหตุการณ์ล่าสุดที่อาจสัมพันธ์กันสองสามเหตุการณ์ที่ฉันนึกออก:
- แพ็คเกจ httpd24u อัปเดตค่อนข้างเร็วไฟล์ของ httpd (โมดูล ฯลฯ) ทั้งหมดมีเวลาแก้ไขล่าสุดคือวันที่ 7 มกราคม อย่างไรก็ตาม ฉันไม่คิดว่าปัญหาของเราจะย้อนกลับไปไกลขนาดนั้น
- เราเพิ่งเปิดใช้ HTTP/2 เมื่อเร็วๆ นี้ (3 ก.พ.) สิ่งนี้เกี่ยวข้องกับการเปลี่ยน httpd จาก "ผู้ปฏิบัติงาน" เป็น MPM "เหตุการณ์" อย่างน้อยบนเซิร์ฟเวอร์เครื่องใดเครื่องหนึ่ง
ขั้นตอนการแก้ไขปัญหาถัดไปที่ชัดเจนคือการปิดใช้ HTTP/2 และดูว่าข้อผิดพลาดหายไปหรือไม่ อย่างไรก็ตาม แม้ว่าจะช่วยได้ เราก็ไม่ต้องการให้ทำงานโดยไม่มี HTTP/2 เป็นเวลานานนัก เนื่องจากการปรับปรุงประสิทธิภาพที่มีให้ ฉันสามารถลองอะไรได้อีกในสถานการณ์นี้
--
อัปเดต: การย้อนกลับไปใช้ 2.4.51 (โดยไม่มีการเปลี่ยนแปลงอื่นๆ) ได้ปรับปรุงความน่าเชื่อถือของเซิร์ฟเวอร์ของเรา ฉันคิดว่าเนื่องจากข้อผิดพลาดนี้ถูกสร้างขึ้นใน 2.4.52: https://bz.apache.org/bugzilla/show_bug.cgi?id=65769