【问题标题】:Server lagging - Django + mongodb + cronjob服务器滞后 - Django + mongodb + cronjob
【发布时间】:2015-10-02 13:21:57
【问题描述】:

我正在部署一个 Django 应用程序,我使用 apache 进行部署,模块 WGSI 和 mongodb 作为数据库。

我每 10 分钟调用多个 cronjob,为许多 API 收集数据(使用 django-kronos)。

当服务器启动时,一切都很好,但几个小时后服务器开始滞后,现在他倒下了。使用了 100% 的 CPU。 Here:

这是我的 crontask 之一:

@kronos.register('*/10+2 * * * *')
def update_mongo():
  # init the instagram api
  api = InstagramAPI(client_id = 'SOCIAL_AUTH_INSTAGRAM_KEY',
    client_secret = 'SOCIAL_AUTH_INSTAGRAM_SECRET')

  # Get Last post added in database
  try:
    last_id = Post.objects(keywords = 'news').order_by('-created_at').limit(1)[0].insta_id
  except:
    last_id = 0

  # Get the last Media tagged news
  if last_id != 0:
    results = api.tag_recent_media(tag_name = 'news', min_tag_id = last_id)
  else:
    results = api.tag_recent_media(tag_name = 'news')

  for result in results:
    # if post doesn't exist, we create a new one
    try:
      post = Post.objects.get(insta_id = result.id)
    except:
      post = InstaPost()

    # Init the post and save it in database
    post.save(result)

如果我不知道问题到底出在哪里,现在的问题是 apache + django 吗?还是这条线post = Post.objects.get(insta_id = result.id)

编辑

我删除了 cronjob 并遇到了同样的问题,一段时间后,物理内存和 CPU 刚刚爆炸,服务器开始严重滞后。

服务器是一个非常糟糕的临时服务器:1 个核心,992 MB RAM

【问题讨论】:

  • 我看到你用的是newrelic。使用new relic就可以知道哪部分代码占用CPU最多。
  • @EdwinLunando 我只在服务器上安装了它,我现在正在注册我的应用程序
  • 你需要找出 10 到 11 之间发生了什么。Mongo 和 Apache 是稳定的代码,所以除非你把它配置得很奇怪,否则这些都不是问题。另外,为什么不直接发出管理命令并从 actual cron 调用这些命令?
  • @timkofu :我检查了日志,在 10 点之前没有什么特别的事情发生,我在 10:45 左右重新启动了服务器。关于 Mongo 和 Apache 我通过 apt-get 安装了它们,并配置了 apache 以使其与 wsgi 一起工作。制作管理命令和使用 django-kronos 有什么区别?
  • @LolWalid 管理命令 + cron 意味着两者之间没有代码可能会或可能不会与您的应用程序进行不良交互。尽量少使用第 3 方应用程序是一种很好的做法。

标签: django apache mongodb cron wsgi


【解决方案1】:

您的图表显示应用程序变慢时的内存、磁盘和 CPU 活动。这可能是因为您的应用程序内部存在内存消耗。当应用程序达到其内存限制时,它将开始交换到磁盘。能否也贴一下swapfile使用情况的图表?

【讨论】:

  • 服务器没有swap,是亚马逊的测试服务器,很小很便宜。
  • 如果不交换内存,那么可能是虚拟内存使用情况?无论如何,您是否可以分析您的应用程序的内存消耗?由于您使用的是 WSGI,您可能会发现 the Dozer package 很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多