سؤال كيف يمكنك تصحيح خطأ في php5-fpm kernel segfault؟


قبل أسبوعين ، بدأت مراسلة OSSEC ترسل لي syslogs حول segfault في بلدي php5-fpm. وهنا جزء من السجلات:

Dec 19 15:09:38 mydropplet kernel: [165740.998932] php5-fpm[26936]: segfault at 7fff621ad001 ip 000000000079fe74 sp 00007fff621a5040 error 6 in php5-fpm[400000+800000]

لذلك ، نظرت إلى سجلات الأخطاء لمعرفة ما إذا كان لديّ بعض أخطاء PHP في مكان ما والتي تسببت في segfault (بما أنني لست متأكداً مما يعنيه ذلك ، ولكن يبدو أنه شيء في جوهر PHP) كانت سجلات الأخطاء الخاصة بي موجودة فيه ( تحديد المعلومات التي تمت إزالتها):

2015/12/19 01:36:49 [error] 6177#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx
2015/12/19 01:36:54 [error] 6177#0: gv.symcd.com could not be resolved (110: Operation timed out) while requesting certificate status, responder: gv.symcd.com
2015/12/19 02:00:06 [error] 6178#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx
2015/12/19 02:00:11 [error] 6178#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx
2015/12/19 02:00:16 [error] 6178#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx
2015/12/19 02:00:21 [error] 6178#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx
2015/12/19 02:00:26 [error] 6178#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx
2015/12/19 02:00:31 [error] 6178#0: recv() failed (111: Connection refused) while resolving, resolver: xxx.xxx.xxx.xxx:xx

لذا ألقيت نظرة فاحصة على syslogs بلدي كان هذا في ذلك. هذا هو الجزء نفسه من السجلات التي كنت أشاهدها في رسائل البريد الإلكتروني من OSSEC:

Dec 19 09:44:06 mydomain kernel: [146209.162601] php5-fpm[13787]: segfault at 7fff621ad001 ip 000000000079fe74 sp 00007fff621a5040 error 6 in php5-fpm[400000+800000]

هنا بقية تسجيل الدخول:

Dec 19 09:44:59 mydomain postfix/anvil[26420]: statistics: max connection rate 1/60s for (smtp:195.22.126.137) at Dec 19 09:41:39
Dec 19 09:44:59 mydomain postfix/anvil[26420]: statistics: max connection count 1 for (smtp:195.22.126.137) at Dec 19 09:41:39
Dec 19 09:44:59 mydomain  postfix/anvil[26420]: statistics: max cache size 1 at Dec 19 09:41:39
[...]
Dec 19 09:41:39 mydomain postfix/smtpd[26418]: connect from unknown[195.22.126.137]
Dec 19 09:41:39 mydomain postfix/smtpd[26418]: disconnect from unknown[195.22.126.137]

أنا جديد تمامًا على الخوادم ذاتية الإدارة ، لذا فأنا لست متأكدًا من كيفية تصحيح هذا الخادوم. أقوم بإدارة موقعي الشخصي على هذا الخادم والشيء الوحيد الذي قمت به قبل أسبوعين هو تثبيت مكون إضافي جديد من مستودع ووردبريس ، بسبب ضيق الوقت للبحث عن تكوين مناسب قمت بتفعيله وتهيئته ، وقام بتجميعه الواجهة الأمامية لموقعي. لذا قمت بإيقافها وقررت إعطائها في وقت لاحق. بعد ذلك بدأت أخطاء النواة.

لذلك أزلت البرنامج المساعد تمامًا ، وأعتقد أنه قد يكون السبب ، لكنه لم يحل أي شيء. لم يكن للبرنامج المساعد إلا حق الوصول للكتابة إلى دليل الويب الخاص بي ولم يكن ليتمكن من تغيير أي إعدادات تكوين أساسية. لست متأكدا ما إذا كان هناك اتصال هناك ، لكنني اعتقدت أنني سوف أذكر ذلك.

لقد قمت أيضا بتشغيل هذا التكوين PHP منذ أكتوبر مع أي مشاكل. لم أضف أي وحدات جديدة / غريبة في PHP. انها في الاساس خارج منطقة الجزاء ، باستثناء بعض الاحتياطات الامنية. قبل رؤية الخطأ ، قمت بتنفيذ ترقية توزيعة كجزء من الصيانة الدورية:

sudo apt-get dist-upgrade
sudo apt-get update
sudo shutdown -r now

كان هذا في الوقت نفسه تقريبًا أثناء تثبيت المكون الإضافي. في محاولة لإصلاح الأخطاء ، قمت بتنفيذ الأوامر مرة أخرى ، معتقدًا أنه إذا كان هناك خطأ ، فمن المؤكد أنه تم دفع رقعة. هذا ، ومع ذلك ، لم يساعد. لذلك أنا في حيرة ما يمكنني فعله للتغلب على هذا.

تحديث: لقد تدحرجت إلى لقطة سابقة ، وعمل كل شيء لمدة أسبوع تقريبًا ، ثم بدأت في تلقي رسائل إلكترونية مرة أخرى عن نفس قضية قطع الخطأ بعد فترة قصيرة من عيد الميلاد. لذا عدت إلى المربع الأول.

أي نصيحه تكون ممتازة! أنا أركض LEMP Ubuntu 14.04 LTS server. كيف أقوم بتصحيح مشكلة كهذه؟ شكرا لأية مساعدة في وقت مبكر.


3
2017-12-29 18:58


الأصل




الأجوبة:


إذا كنت تعتقد أن الخطأ يتعلق بـ Nginx ، فعليك نشر سجلات Nginx ذات الصلة. هناك اشارات الى resolver في سجلاتك المنشورة ، والتي قد ترتبط بـ Nginx.

إذا كان محلل Nginx على خطأ ، فقد تتمكن من حل المشكلة عن طريق استخدام عناوين IP خام في تكوين Nginx بدلاً من أسماء المجال.

تحقق أيضًا من نسختك الحالية من php5-fpm مقابل أحدث إصدار متوفر في مستودع Git الخاص بهم. ثم تحقق من Changelog للمشروع للتغييرات الأحدث من الإصدار الذي تستخدمه. إذا كان هناك إصدار أحدث متاح ، فيمكنك الاطلاع على الترقية.

Segfaults تشير إلى خلل في البرنامج ، وليس مشكلة في التكوين. حتى لو كان وجه التهيئة السيئة ، لا يجب على برنامج segfault. لأنه يبدو php5-fpm كانت العملية التي تم فصلها ، والنظر في الإبلاغ عن خطأ على قائمة المراسلات أو تعقب القضية إذا لم يتم إصلاحه في أحدث إصدار.

من الممكن أيضًا تشغيل البرنامج عبر php5-fpm هو ما segfault'ed و php5-fpm هو مجرد رسول تسليم إشعار segfault. مرة أخرى ، php5-fpm سيكون المشروع المرجع الموثوقة لمعرفة كيفية الخروج segfaults مع هذا البرنامج.


1
2018-02-01 16:27



واو ، شكراً لك على هذه الإجابة الدقيقة! عندما أحصل على فرصة سأقوم بنشر سجلات Nginx. قد أفتح تذكرة حتى php5-fpm في هذه الأثناء ، ولكن إذا لم أتمكن من الوصول إليها قبل نشر سجلات Nginx ، ربما يمكنك أن توصي بفتح تذكرة معهم أو لا. - mrClean
يجب عليك فتح تذكرة في حالة: 1. إعادة إظهار المشكلة بأحدث إصدار لها (والتي قد تكون أحدث من ما تم حزمه لـ Ubuntu). 2. أنت متأكد من أن المشكلة هي معهم. 3. لقد فتشت في تعقب الأخطاء والمستندات لتأكيد أنها ليست مشكلة معروفة. كن مستعدًا لتقديم تفاصيل عن التهيئة التي قد تكون ذات صلة بتشغيل المشكلة. - Mark Stosberg
شكرا مارك ، سأكون على يقين من فعل ذلك! تعليق عظيم ، مفيد جدا. - mrClean