سؤال

لا بد لي من تشغيل موقع Zope2 Legacy ولدي بعض التظلم معه. المشكلة الأكبر هي أنه ، في بعض الأحيان ، يتم إغلاقه ، حيث يعمل في تحميل وحدة المعالجة المركزية بنسبة 100 ٪ وعدم الرد على الطلبات بعد الآن. على الرغم من أن المشكلة ليست قابلة للتكرار بشكل منتظم ، إلا أن صفحة واحدة تحتوي على 3 رسومات ديناميكية تؤدي إليها في بعض الأحيان ، لذلك أظن أن هناك نوعًا من حالة السباق التي تؤدي إلى حلقة لا نهاية لها أو معلقة.

المشكلة هي أنني لم أجد بعد طريقة لتصحيح هذا الشيء. لا يوجد شيء في سجلات Zope ولا شيء في سجلات النظام. جربت الاقتراحات من هذا السؤال للحصول على stacktrace ، ولكن الإشارة الوحيدة التي لها أي تأثير هي SIGKILL.

هل هناك إمكانية أخرى لمعرفة أين هي بالضبط العملية عندما تتعثر؟

هل كانت مفيدة؟

المحلول

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

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

نصائح أخرى

يمكنك طباعة أثر مكدس لطيف باستخدام pyrasite.

أولاً ، ستحتاج إلى تثبيت GDB.

# Redhat, CentOS, etc
$ yum install gdb

# Ubuntu, Debian, etc
$ apt-get update && apt-get install gdb

ثم ، تثبيت pyrasite.

$ pip install pyrasite

يستخدم ps أو طريقة أخرى للعثور على معرف العملية لعملية Python المعلقة وتشغيلها pyrasite-shell معها.

# Assuming process ID is 12345
$ pyrasite-shell 12345

يجب أن ترى الآن Python Repl. قم بتشغيل ما يلي في REPL لمشاهدة آثار المكدس لجميع المواضيع.

import sys, traceback
for thread_id, frame in sys._current_frames().items():
    print 'Stack for thread {}'.format(thread_id)
    traceback.print_stack(frame)
    print ''

انظر إجابتي على هذا السؤال جدا, ، استعمال المنتجات. يسجل نفس المعالج مثل الإجابة التي وجدتها بالفعل ، في وقت تسجيل المنتج. ربما يعمل بشكل أفضل لك.

إذا لم يكن الأمر كذلك ، فمن المحتمل أن يكون لديك مشكلة I/O على مستوى OS على يديك ، وآملك الوحيد هو إرفاق GDB بالعملية. Search Stack Overflow للحصول على إجابات GDB ؛ هناك ثروة من المعلومات هنا!

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

بعد الركض حول الإنترنت في دوائر لفترة من الوقت انتهى بي الأمر هنا: http://podolia.org/2016/04/10/debugging-cpython-gdb/ - يصف بالتفصيل كيف تتلاءم جميع القطع معًا. كان اقتباس المال بالنسبة لي 'gdb /usr/bin/python -P $ PID ' - مطلوب اسم القابل للتنفيذ حتى يجد GDB ملفات معلومات التصحيح الصحيحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top