在虚拟化环境(生产)上安装带有 Oracle 的 SonarQube,与具有相同发行版的其他安装相比,配置文件管理非常慢。
当许多配置文件在此架构(虚拟化 Linux + Oracle)上使用时,我将不胜感激有关此功能的响应时间的一些反馈。
下面的测试和快速分析提供了一些信息/案例再现。
分配 :
- SonarQube 3.7.3 带有 39 个插件(jar 文件位于 extensions/plugins/ 中)
- 9 种语言配置文件:C#/C++/Flex/Java/JavaScript/PHP/Python/Web/XML(问题随着配置文件数量的增加而增加)
- 全新安装(未分析项目,默认配置文件)
Scenario :
- Calling profiles页面(如尼莫个人资料页面),缓存填满后报告第二次调用,平台上只有 1 个用户
- 在 logback.xml 的 INFO 中记录“rails”
虚拟机虚拟化 :
- Linux SLES 11(补丁 2)x86 64b
- DELL R815 / 16 核 AMD(SonarQube VM 保证:1 核和 8 Go)
VM环境测试 :
- 8093ms(视图:7219,DB:864):VM 上的服务器/VM 上的 Oracle
- 2206ms(视图:1851,DB:346):服务器和 H2 嵌入在同一虚拟机上
=> H2 的响应时间可以接受(VM 上的 CPU 频率不是很高),因此没有 CPU/IO/RAM 饱和。但对Oracle的View部分有些怀疑.
个人测试 :
- 2054ms(视图:542,DB:1506):笔记本电脑 Dell Vostro 3300 上的服务器/NAS Qnap TS-219 上的 MySql
- 808 毫秒(视图:528,数据库:273):笔记本电脑 Dell Vostro 3300 上的服务器和 HsqlDB
=> 远程数据库对视图部分没有影响(在本例中使用 MySQL)
为了乐趣和信息, SonarQube 在 Qnap TS-219 (CPU armv5tel!!) 上运行(启动和配置文件咨询)Java 服务包装器Linux CPU armel v3.5.22
- 13762ms(视图:10877,DB:2832):NAS Qnap TS-219 上的服务器和 H2 嵌入
- 13622ms(视图:10581,DB:2997):NAS Qnap TS-219 上的服务器和 MySQL
=> Qnap TS-219 不足以支持 SonarQube(CPU 饱和;-))。
通过在 JMX 远程连接 JVisual 来获取一些线程转储,75% 具有此堆栈(其他等效,直到 Runtime Cache.getConstants From):
java.lang.Thread.State: RUNNABLE
at java.lang.Throwable.getStackTraceElement(Native Method)
at java.lang.Throwable.getOurStackTrace(Throwable.java:591)
- locked <5512520e> (a java.lang.Exception)
at java.lang.Throwable.getStackTrace(Throwable.java:582)
at java.lang.Thread.getStackTrace(Thread.java:1479)
[...]
at org.jruby.RubyException.prepareBacktrace(RubyException.java:160)
[...]
at org.jruby.exceptions.RaiseException.<init>(RaiseException.java:141)
[...]
at org.jruby.Ruby.newNameError(Ruby.java:3243)
at org.jruby.RubyModule.const_missing(RubyModule.java:2647)
at org.jruby.RubyModule$i$1$0$const_missing.call(RubyModule$i$1$0$const_missing.gen:65535)
[...]
at rubyjit.ActiveSupport::Dependencies::ClassConstMissing#const_missing_1F94EEFD25B9D6ED4A2256A01713AC5D8AAE19F9.__file__(/[sonar-dir]/sonar-3.7.3/war/sonar-server/WEB-INF/gems/gems/activesupport-2.3.15/lib/active_support/dependencies.rb:118)
at rubyjit.ActiveSupport::Dependencies::ClassConstMissing#const_missing_1F94EEFD25B9D6ED4A2256A01713AC5D8AAE19F9.__file__(/[sonar-dir]/sonar-3.7.3/war/sonar-server/WEB-INF/gems/gems/activesupport-2.3.15/lib/active_support/dependencies.rb)
[...]
at org.jruby.RubyModule.fastGetConstantFromConstMissing(RubyModule.java:2974)
at org.jruby.ast.executable.RuntimeCache.getConstantFrom(RuntimeCache.java:418)
at org.jruby.ast.executable.AbstractScript.getConstantFrom0(AbstractScript.java:292)
at rubyjit.ArJdbc::Oracle#sql_literal?_35B81FE146BCEA62ED756B5BE2D767870ADF57AC.rescue_1$RUBY$SYNTHETIC__file__(/[sonar-dir]/sonar-3.7.3/war/sonar-server/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/oracle/adapter.rb)
at rubyjit.ArJdbc::Oracle#sql_literal?_35B81FE146BCEA62ED756B5BE2D767870ADF57AC.__file__(/[sonar-dir]/sonar-3.7.3/war/sonar-server/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/oracle/adapter.rb:162)
at rubyjit.ArJdbc::Oracle#sql_literal?_35B81FE146BCEA62ED756B5BE2D767870ADF57AC.__file__(/[sonar-dir]/sonar-3.7.3/war/sonar-server/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/oracle/adapter.rb)
[.......]
at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
[...]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:662)
假设 :
- 很多时候生成java异常(CPU成本不可忽略)? (或者异常编程是一个期望的过程)
- 尤其是 Oracle 连接器? (或者用于生成请求的 Oracle 方言可以在许多配置文件时解释这些响应时间)
也许我看到了没有的问题...但是此页面上的 Oracle 响应时间(更普遍的是配置文件管理)可能有点奇怪。
预先感谢您的反馈或想法。
讨论已切换到 SonarQube 用户邮件列表:http://sonar.markmail.org/thread/gbmj5dwyrrysujfo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)