2016-04-14 24 views
2

Şu anda bir portleti düzenlemenin bir kilitlenmeye neden olduğu bir Plone 4.3.8 sitesi var.Plone kilitlenme sorunlarını çözmenin modern yolu nedir?

Bunu düzeltmek için araçlar bulmaya çalışıyorum, ancak çoğu kilitlenme aracı çalışmıyor & En azından çalışmakta olanlardan iyi bilgi (IMO) alamıyorum.

denedim:

  • z3c.deadlockdebugger => Bir stacktrace olamıyorum
  • ZopeHealthWatcher =>
  • Products.LongRequestLogger komut satırından (veya web sayfasında) sonuçları göremiyorum => belki de şimdiye kadarki en iyisi, bazı günlük çıktıları verir - ancak yığın izleri Diazo koduna odaklanır, ancak Diazo'nun kapsama girmediği durumlarda sorun hala ortaya çıkar (127.0.0.1'e karşı çalışır)
  • gdb ek - sadece indi C kodunda
  • winpdb => o
  • Products.signalstack (OR Products.signalstacklogger) => USR1 sinyali sadece kapanıyor can gdb (sadece süreçlere winpdb tarafından eki niyetiyle başladı) aynı şekilde çalışan süreçleri için ekleyemezsiniz zope süreci!

Not: z3c.deadlockdebugger (ve buna bağlı şeyler) ihtiyaçlar threadframe bağımlılığını düşmesi source code kontrol etti.

Durumum, ürün yükseltmeleriyle bağlantılı görünüyor - muhtemelen biri ya da her ikisi de plone.app.contenttypes ya da plone.app.multilingual, boş bir sitenin bu sorunu yok, ama açıkçası benim site verilerine ihtiyacım var !

Bunu geliştirmek için ne yapmalıyım?

DÜZENLEME:

Ben Maurits en doğru biri olarak cevap inanıyoruz, ama benim durumumda işe yaramadı. Ne yaptım, kodun asılı olduğu noktayı izlemek için pdb kullanıyordu (plone.app.debugtoolbar içinde olduğu gibi)

+0

Konu çerçevesi bağımlılığı hakkında: Bu uzun bir süre önce kullanımdan kaldırılmıştır, ancak bunu, 'yumurta' bölümüne ekleyerek bu geniş kapsamlı uygulamanıza eklemeyi de seçebilirsiniz. Pypi'de yayınlanmadığı için, ek bir 'find-links '(' https: // majid.info/python/threadframe/') ve' allow-hosts' 'de eklemelisiniz. –

+0

@keul majid'in sitesi [threadframe'deki makale] (https://majid.info/blog/threadframe-multithreaded-stack-frame-extraction-for-python/) diyor ki: "Python 2.5 ve üstü bir işlev sys._current_frames () "Bu yüzden bu tavsiyeyi – Danimal

+0

kabul ediyorum, doğru, fakat kaynak kodunu değiştirmek istemiyorsanız, yine de (artık kullanımdan kaldırılmış ve yararsız) threadframe kullanabilirsiniz. –

cevap

4

Products.signalstack kullanırken USR1 sinyalinin Zope'u kapattığını söylüyorsunuz. Ama özel paketlere gerek yok, bu yüzden Signaltack ekleyerek Zope kapatmanın bu yan etkisi varsa merak ediyorum.

En azından benim için, birkaç hafta önce, bu Plone'un 4.3.something sitesinde iyi çalıştı :

kill -USR1 $(cat var/zeoclient.pid) 
+1

Tamam - Signaltack'ı kaldırdım (ancak Products.LongRequestLogger'ı sakladım) - ve portleti düzenlemeye çalışmadan önce bu bir stacktrace vermekteyim, ama ne yazık ki * bundan sonra * çalışmıyor. Neden kafam karıştı? Bunu geliştirme aşamasında yakaladım, bu yüzden bir ZEO istemcisinden ziyade tek başına bir hata ayıklama yapıyorum - önemli değil mi? – Danimal

+0

Gerçekten, "Products.singalstack", [Zope 2.12.5'e entegre edildi] (https://github.com/zopefoundation/Zope/commit/16796274463f21327e1b7bb3831b39eb671460af) 2010'da geri döndü. –

2

@maurits doğru cevap rağmen (ve en basit olanları) bazen sorunlar görmeye vardı kill komutundan kaynaklanan traceback: bazen olay günlüğünde, bazen de kabukta bulunur.

Buildout'un haufe.requestmonitoring ile entegrasyonunu da tercih ediyorum, ayrıca monitor long running requests feature'u da yapılandırabilirsiniz. Olay günlüğünüzde kilitlenen izleri göreceksiniz ve ayrıca Plone'nuzdaki düşük performansı izlemek için bir aracı etkinleştireceksiniz.

+0

teşekkürler - ama bu benim için de işe yaramadı - – Danimal

+0

konumunda bir traceback göremiyorum Traceback'i görmüyorsanız, uzun çalışma isteği özelliklerini, size verdiğim bağlantıda ( –

+0

) yaptığım şekilde yapılandırılmamış olabilirsiniz, ancak @maurits method didn ' Benim için de bir yığın izi oluştur. Endişelenme - pdb sonunda beni oraya getirdi. Teşekkürler! – Danimal

İlgili konular