AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 759752
Accepted
kubanczyk
kubanczyk
Asked: 2016-02-26 05:49:22 +0800 CST2016-02-26 05:49:22 +0800 CST 2016-02-26 05:49:22 +0800 CST

redmine 糟糕的写入性能(更新不是真正的多线程)

  • 772

(已经自我回答)我正在与大约 100 个用户的 redmine 性能不佳作斗争。为了测试它,我设置了一个简单的场景来更新五个不同示例问题的“完成百分比”。所有更新都在同一秒开始,使用curl. 令我惊讶的是,redmine 中的更新似乎是序列化的(我的意思是不是多线程的),时序如下:

real    0m1.122s
real    0m1.404s
real    0m2.258s
real    0m2.782s
real    0m3.151s
real    0m3.336s

或者另一种尝试,当其他会话的一些处理也受到阻碍时:

real    0m7.492s
real    0m7.803s
real    0m8.045s
real    0m8.246s
real    0m8.597s
real    0m8.825s

production.log在处理大量 SQL 查询后的关键时刻是 COMMIT 阶段。请注意 COMMIT 是如何在毫秒内完成的,但在 COMMIT 之间发生了一些神秘的事情,不仅将它们序列化,而且需要几秒钟才能达到 Completed 状态。此日志摘录完好无损 - 我没有删除中间的任何行。

   (0.6ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (30.1ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/11973
Completed 302 Found in 7418.4ms (ActiveRecord: 135.8ms)
   (0.6ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (24.8ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/9240
Completed 302 Found in 7738.3ms (ActiveRecord: 57.4ms)
   (0.4ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (25.9ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/9614
Completed 302 Found in 7949.0ms (ActiveRecord: 135.7ms)
   (0.5ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (24.6ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/12016
Completed 302 Found in 8058.5ms (ActiveRecord: 102.5ms)
   (0.5ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (21.2ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/8853
Completed 302 Found in 8472.5ms (ActiveRecord: 90.4ms)
   (0.5ms)  SELECT COUNT(*) FROM `custom_workflows` WHERE `custom_workflows`.`active` = 1 AND `custom_workflows`.`observable` = 'issue' AND (is_for_all OR EXISTS (SELECT * FROM custom_workflows_projects WHERE project_id=123 AND custom_workflow_id=id))
   (27.9ms)  COMMIT
Redirected to http://redmine.mydomain.local/issues/10007
Completed 302 Found in 8700.4ms (ActiveRecord: 137.4ms)

我已经检查过的内容:

  • 乘客状态的线程数绰绰有余
  • apache2 httpd 的进程数绰绰有余
  • mysql 5.1 使用 innodb
  • innotop 不显示锁
  • innotop 不会过多的 I/O
  • iostat 没有显示过多的 I/O(大约 10-15 IOPS,磁盘最大 17% 的时间使用)
  • top 没有显示过多的 CPU 使用率(最多可能 400% 的 70%)。
redmine
  • 1 1 个回答
  • 81 Views

1 个回答

  • Voted
  1. Best Answer
    kubanczyk
    2016-02-26T06:57:22+08:002016-02-26T06:57:22+08:00

    好的,这是 SMTP 序列化的东西;默认情况下它以某种方式未记录。

    我改变了/var/www/html/redmine/config/configuration.yml:

      email_delivery:
        # delivery_method: :smtp       # slows down everything!
        delivery_method: :async_smtp
    
    • 0

相关问题

  • 对于 RoR 应用程序,强制 URL 根为 HTTPS 而不是 HTTP

  • Ruby on Rails 应用程序的虚拟主机设置(mod 乘客)

  • 在 Apache + Passenger 上运行 Ruby on Rails 应用程序 == 占用大量内存

  • 在 2003 服务器上使用 SQLITE 备份 Redmine?

  • 在 Windows Server 2003 上使用 Bitnami 堆栈安装程序设置 Redmine

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve