首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:populate()不是重入的

:populate()不是重入的
EN

Stack Overflow用户
提问于 2017-08-01 11:28:48
回答 1查看 6.2K关注 0票数 0

我有石墨服务器,它的守护进程会断断续续地失败,

代码语言:javascript
复制
HTTP CRITICAL: HTTP/1.1 500 Internal Server Error - string 'datapoints' not found on 'http://192.168.12.15:8000/render/?target=sys.example_com.snmp.if_octets-Gi0_0_0.rx&format=json&from=-5min' - 723 bytes in 0.002 second response time |time=0.002067s;;;0.000000 size=723B;;;0

所以我重新启动了apache修复了这个问题。但是我想解决这个问题的根本原因,我不能每次都重新启动apache。我想永久解决这个问题。这就是我在错误日志中发现的,

代码语言:javascript
复制
[Tue Aug 01 20:16:01] [wsgi:error] RuntimeError: populate() isn't reentrant
[Tue Aug 01 20:16:21] [wsgi:error] Target WSGI script '/usr/lib/python2.7/dist-packages/graphite/wsgi.py' cannot be loaded as Python module.
[Tue Aug 01 20:16:21] [wsgi:error] Exception occurred processing WSGI script '/usr/lib/python2.7/dist-packages/graphite/wsgi.py'.
[Tue Aug 01 20:16:21] [wsgi:error] Traceback (most recent call last):
[Tue Aug 01 20:16:21] [wsgi:error] File "/usr/lib/python2.7/dist-packages/graphite/wsgi.py", line 14, in <module>
[Tue Aug 01 20:16:21] [wsgi:error] application = get_wsgi_application()
[Tue Aug 01 20:16:21] [wsgi:error] File "/usr/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Tue Aug 01 20:16:21] [wsgi:error] django.setup()
[Tue Aug 01 20:16:21] [wsgi:error] File "/usr/lib/python2.7/dist-packages/django/__init__.py", line 21, in setup
[Tue Aug 01 20:16:21] [wsgi:error] apps.populate(settings.INSTALLED_APPS)
[Tue Aug 01 20:16:21] [wsgi:error] File "/usr/lib/python2.7/dist-packages/django/apps/registry.py", line 78, in populate

这是我的/usr/lib/python2.7/dist-packages/graphite/wsgi.py文件,

代码语言:javascript
复制
import os
import sys

try:
    from importlib import import_module
except ImportError:
    from django.utils.importlib import import_module

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'graphite.settings')  # noqa

from django.conf import settings
from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

try:
    import whitenoise
except ImportError:
    whitenoise = False
else:
    # WhiteNoise < 2.0.1 does not support Python 2.6
    if sys.version_info[:2] < (2, 7):
        whitenoise_version = tuple(map(
                int, getattr(whitenoise, '__version__', '0').split('.')))
        if whitenoise_version < (2, 0, 1):
            whitenoise = False

if whitenoise:
    from whitenoise.django import DjangoWhiteNoise
    application = DjangoWhiteNoise(application)
    prefix = "/".join((settings.URL_PREFIX.strip('/'), 'static'))
    for directory in settings.STATICFILES_DIRS:
        application.add_files(directory, prefix=prefix)
    for app_path in settings.INSTALLED_APPS:
        module = import_module(app_path)
        directory = os.path.join(os.path.dirname(module.__file__), 'static')
        if os.path.isdir(directory):
            application.add_files(directory, prefix=prefix)

更新

这是我正在使用的石墨配置文件,

代码语言:javascript
复制
<VirtualHost *:8000>
  ServerName graphite-web

  ## Vhost docroot
  DocumentRoot "/var/www"
  ## Alias declarations for resources outside the DocumentRoot
  Alias /static "/var/lib/graphite/webapp/content"

  ## Directories, there should at least be a declaration for /var/www

  <Directory "/var/www">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>

  ## Logging
  ErrorLog "/var/log/apache2/graphite-web_error.log"
  ServerSignature Off
  CustomLog "/var/log/apache2/graphite-web_access.log" combined
  WSGIScriptAlias / "/usr/lib/python2.7/dist-packages/graphite/wsgi.py"
</VirtualHost>

是什么导致了这个问题?能帮个忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 12:28:54

您需要返回并在此之前在日志中查找错误。也就是说,针对进程的第一个请求,或者当WSGI脚本被加载时,如果启用了预加载的话。您给出的错误不是根本原因,而是后续请求在第一个请求之后失败的结果,这是因为Django初始化在第一次失败时不再是可重入的。

如果这是一个临时问题,您应该确保您正在使用mod_wsgi守护进程模式,并将startup-timeout=15设置在WSGIDaemonProcess上,作为从瞬态问题中自动恢复的方式。造成瞬态故障的原因之一是Apache第一次启动时数据库不可用。

但是,您需要确保您有一个最新的mod_wsgi版本,而不是Linux发行版为获得该startup-timeout选项而提供的旧版本。

我还建议您在问题中添加您正在使用的mod_wsgi配置,这样您就可以评论是否还有什么您应该以不同的方式进行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45436566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档