1

Zopeインスタンスが規則性を増してロックアップする原因となっている問題の根底に到達しようとしています。私はProducts.signalstackLoggerをインストールして、その根底に到達しようとしましたが、Ploneで定義したコンテンツルールの1つが電子メールを送信しようとしているときに発生しているようです。

例えば:

Thread 46447504 (GET /VirtualHostBase/https/xxx.xxx.xxx:443/plone/VirtualHostRoot/news/portal_factory/News Item/news_item.2012-09-18.0763501726/edit):
  File "/home/zope/home/parts/zope2/lib/python/ZServer/PubCore/ZServerPublisher.py", line 31, in __init__
    response=b)
  File "/home/zope/home/parts/zope2/lib/python/ZPublisher/Publish.py", line 401, in publish_module
    environ, debug, request, response)
  File "/home/zope/home/parts/zope2/lib/python/ZPublisher/Publish.py", line 202, in publish_module_standard
    response = publish(request, module_name, after_list, debug=debug)
  File "/home/zope/home/parts/zope2/lib/python/ZPublisher/Publish.py", line 119, in publish
    request, bind=1)
  File "/home/zope/home/parts/zope2/lib/python/ZPublisher/mapply.py", line 88, in mapply
    if debug is not None: return debug(object,args,context)
  File "/home/zope/home/parts/zope2/lib/python/ZPublisher/Publish.py", line 42, in call_object
    result=apply(object,args) # Type s<cr> to step into published object.
  File "/home/zope/home/eggs/Plone-3.3.6-py2.4.egg/Products/CMFPlone/FactoryTool.py", line 375, in __call__
    temp_obj = tempFolder.__getitem__(id)
  File "/home/zope/home/eggs/Plone-3.3.6-py2.4.egg/Products/CMFPlone/FactoryTool.py", line 155, in __getitem__
    self.invokeFactory(id=id, type_name=type_name)
  File "/home/zope/home/eggs/Plone-3.3.6-py2.4.egg/Products/CMFPlone/PloneFolder.py", line 348, in invokeFactory
    new_id = pt.constructContent(*args, **kw)
  File "/home/zope/home/eggs/Products.CMFCore-2.1.3-py2.4.egg/Products/CMFCore/TypesTool.py", line 716, in constructContent
    ob = info.constructInstance(container, id, *args, **kw)
  File "/home/zope/home/eggs/Products.CMFCore-2.1.3-py2.4.egg/Products/CMFCore/TypesTool.py", line 276, in constructInstance
    ob = self._constructInstance(container, id, *args, **kw)
  File "/home/zope/home/eggs/Products.CMFCore-2.1.3-py2.4.egg/Products/CMFCore/TypesTool.py", line 450, in _constructInstance
    newid = m(id, *args, **kw)
  File "<string>", line 7, in addATNewsItem
  File "/home/zope/home/parts/zope2/lib/python/OFS/ObjectManager.py", line 349, in _setObject
    notifyContainerModified(self)
  File "/home/zope/home/parts/zope2/lib/python/zope/app/container/contained.py", line 365, in notifyContainerModified
    notify(ContainerModifiedEvent(object, *descriptions))
  File "/home/zope/home/parts/zope2/lib/python/zope/event/__init__.py", line 23, in notify
    subscriber(event)
  File "/home/zope/home/parts/zope2/lib/python/zope/component/event.py", line 26, in dispatch
    for ignored in zope.component.subscribers(event, None):
  File "/home/zope/home/parts/zope2/lib/python/zope/component/_api.py", line 130, in subscribers
    return sitemanager.subscribers(objects, interface)
  File "/home/zope/home/parts/zope2/lib/python/zope/component/registry.py", line 290, in subscribers
    return self.adapters.subscribers(objects, provided)
  File "/home/zope/home/parts/zope2/lib/python/zope/interface/adapter.py", line 535, in subscribers
    subscription(*objects)
  File "/home/zope/home/eggs/plone.app.contentrules-1.1.7-py2.4.egg/plone/app/contentrules/handlers.py", line 174, in modified
    execute(aq_parent(aq_inner(event.object)), event)
  File "/home/zope/home/eggs/plone.app.contentrules-1.1.7-py2.4.egg/plone/app/contentrules/handlers.py", line 97, in execute
    executor(event, bubbled=True, rule_filter=rule_filter)
  File "/home/zope/home/eggs/plone.contentrules-1.1.0-py2.4.egg/plone/contentrules/engine/executor.py", line 27, in __call__
    executable()
  File "/home/zope/home/eggs/plone.contentrules-1.1.0-py2.4.egg/plone/contentrules/rule/rule.py", line 48, in __call__
    if not executable():
  File "/home/zope/home/eggs/plone.app.contentrules-1.1.7-py2.4.egg/plone/app/contentrules/actions/mail.py", line 103, in __call__
    From=source)
  File "/home/zope/home/eggs/Products.SecureMailHost-1.1.2-py2.4.egg/Products/SecureMailHost/SecureMailHost.py", line 246, in secureSend
    return self._send(mfrom, all_recipients, msg, debug=debug)
  File "/home/zope/home/eggs/Products.SecureMailHost-1.1.2-py2.4.egg/Products/SecureMailHost/SecureMailHost.py", line 276, in _send
    mail.send()
  File "/home/zope/home/eggs/Products.SecureMailHost-1.1.2-py2.4.egg/Products/SecureMailHost/mail.py", line 102, in send
    smtpserver = smtplib.SMTP(self.host, self.port)
  File "/usr/local/lib/python2.4/smtplib.py", line 244, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/local/lib/python2.4/smtplib.py", line 311, in connect
    (code, msg) = self.getreply()
  File "/usr/local/lib/python2.4/smtplib.py", line 352, in getreply
    line = self.file.readline()
  File "/usr/local/lib/python2.4/socket.py", line 332, in readline
    data = self._sock.recv(self._rbufsize)

これらの通知は通常問題なく機能し(多くの電子メールが1日に送信されます)、12か月以上にわたって構成されており、問題は過去2か月にのみ発生します。問題を進めた唯一の大きな変更は、ApacheロードバランサーからHaproxyへの切り替えでした

使用しているもの:

  • Linux
  • ローカルqmailサーバー(localhost:25)
  • Python 2.4.6
  • Plone 3.3.6
4

1 に答える 1

1

これは、qmail サーバーが外部接続の制限に達した結果のようです。これを 30 に設定し、1 つの IP (おそらくスパムボット) が 20 を占有していました。

私たちの Zope インスタンスは、同じ仮想サーバー上の qmail を介して電子メールを送信しますが、それは外部に面したメール サーバーでもあります。接続制限に達すると、smtplib からの接続試行はタイムアウトなしで待機するようです。

今のところ、問題のあるコンテンツ ルールをオフにしました。長期的には、 ucspi-tcp にパッチを適用して IP による接続を制限し、ローカルと外部の電子メールに別のメール サーバーを使用するように切り替える可能性があります。

于 2012-09-19T09:19:36.860 に答える