zoukankan      html  css  js  c++  java
  • Redmine export performance tracing and resolution

    环境: bitnami redmine 3.3.0 on win7(x32), mysql 5.6.32 for win32, 4G物理内存, ruby 2.1.8, rails 4.2.6

    问题: 因为自定义字段数量较多,导出issues时,如果事务数量过多,会出现502 Proxy Error提示,如下图。

    image

    解决:

    1、修改apache proxy超时时间

    在Bitnami edmine-3.3.0-0apps edmineconfhttpd-prefix.conf文件里增加:

    ProxyTimeout 300

    因为通过服务器集群设置来完成负载均衡,3001和3002端口为两个不同的thin服务器,8080端口收到http请求时,代理给服务器集群中的服务器进行处理,上述参数为等待代理应答的超时时间,设置为300s.如thin服务器在300s内未处理完,则8080返回浏览器502 Proxy Error。

    该参数默认为60,即60s超时。 设置为300s后,小于5分钟的export可以成功。

    2、优化mysql缓存

    在Bitnami edmine-3.3.0-0mysqlmy.ini文件中[mysqld]段里增加:

    innodb_buffer_pool_size = 1073741824 
    tmp-table-size = 200M
    join-buffer-size = 1M
    query-cache-size = 16M
    innodb-buffer-pool-instances = 1 # The MySQL Documentation suggests 1G per buffer pool instance, innodb_buffer_pool_size should be 2G
    slow-query-log = TRUE
    long-query-time = 5 # 5s
    #query-cache-type = TRUE
    query-cache-limit = 4M

    其中innodb_buffer_pool_size标识缓存大小,可以明显加快访问速度,可以设置为物理内存的50%;innodb-buffer-pool-instances可以提高mysql的并发能力,官方文档建立每个实例每个对应1G的缓存大小,即innodb_buffer_pool_size = innodb-buffer-pool-instances * 1G。

    在不同机器上设置后,超过5分钟的export仍然不能解决,且因为数据量大、不能保证thin服务器在5分钟内完成export任务。

    3、追踪CPU和内存变化

    1)CPU和内存初始状态

    image

    初始时CPU占用率接近0,内存占用固定,mysqld提交1.5G,实际专用内存560MB;ruby.exe内存140MB。

    2)export数据库操作

    image

    开始export后,mysqld的CPU占用率25%(4核CPU中的1核),持续5s左右,下降为0%;

    3)export生成csv文件:

    数据库查询完成后,ruby.exe进程开始占用25%CPU资源:

    image

    同时ruby.exe请求的内存资源快速增长,从开始的不到200M增长到1.5G:

    image

    此后ruby.exe对CPU和内存的资源持续占用,CPU占用率25%左右(4核CPU中的1核)、内存请求一直增长,直至浏览器返回502 Proxy Error。之后ruby.exe继续申请内存,直至1.9G,使得mysql等其它进程的专有内存持续减少。 有一定概率会导致Thin服务器自动退出运行。

    在导出过程中,其它web查询访问均不会响应,在ruby.exe的CPU占有率下降后才响应。

    4)分析结论

    整个过程中,mysqld.exe除了在查询时持续5s左右的25%CPU占有率,其它时间CPU占有率比较固定;内存占用一直比较固定。总体查询较快。

    瓶颈在ruby.exe进程,Thin服务器处理csv生成耗时长,且最后会导致ruby.exe异常退出。总体csv文件生成慢。

    Thin服务器自动退出运行可能和申请不到内存有关。

    5)解决方案

    提高ruby.exe多核并行处理能力;

    找到redmine中csv文件的生成过程和性能瓶颈,如堆栈嵌套过多、计算量偏大等。

    todo:在公司服务器上验证上述过程; 增加内存可以保证ruby.exe获得内存,提高多核处理能力可以加速处理,优化生成过程可以减少资源需求。

  • 相关阅读:
    FTP上传下载使用ASCII与binary的区别
    was日志报检测到cpu饥饿
    AIX的inittab配置文件解释
    启动和停止 IBM HTTP Server
    阿里云 centos7 设置python2 与 python3 并存
    股票---逢9必涨!华为男卖4套房炒股,2019年不能错过?
    看了电影,万箭穿心
    今天是来cnblog的第一天,值得纪念哈^v^
    函数
    集合( set )
  • 原文地址:https://www.cnblogs.com/lustforlife/p/7927262.html
Copyright © 2011-2022 走看看