Windows Server 2008 R2上java类加载缓慢
对于SQL解析,我们在Java web应用程序中使用(GSP)。如果我们在WindowsServer2008R2和Java7上使用GSP部署我们的应用程序,我们会看到在类加载期间出现100%的CPU峰值,这可能会持续几分钟。在初始类加载之后,一切都正常工作,直到我们关闭应用服务器并卸载类:100%的CPU峰值回来了。 如果我们将相同的代码库部署到Windows Server 2012、Windows 7 Enterprise、OS X或Linux服务器,则不会出现这样的峰值。在WindowsServer2008R2上使用Java8稍微改进了启动 使用Microsoft的Process Monitor,我们看到从这个jar加载类时浪费了很多时间。gsp.jar中的类文件被混淆了。除了新添加的jar之外,我们可以排除任何其他原因。仅仅通过解析SQL语句,冷启动时间就会显著增加。禁用防病毒功能无效。并非所有客户都可以选择升级到更新的Windows Server版本 我们正在运行此GSP版本:Windows Server 2008 R2上java类加载缓慢,java,windows,windows-server-2008-r2,sql-parser,Java,Windows,Windows Server 2008 R2,Sql Parser,对于SQL解析,我们在Java web应用程序中使用(GSP)。如果我们在WindowsServer2008R2和Java7上使用GSP部署我们的应用程序,我们会看到在类加载期间出现100%的CPU峰值,这可能会持续几分钟。在初始类加载之后,一切都正常工作,直到我们关闭应用服务器并卸载类:100%的CPU峰值回来了。 如果我们将相同的代码库部署到Windows Server 2012、Windows 7 Enterprise、OS X或Linux服务器,则不会出现这样的峰值。在WindowsSe
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.5.0_09-b01 (Sun Microsystems Inc.)
Built-By: Gudu Software
Vendor: Gudu Software
Title: General SQL Parser Java Version
Version: 1.6.0.5
使用Windows Server 2008 R2执行此测试程序需要40秒以上,在OS X上需要1.5秒
package com.stackoverflow;
import gudusoft.gsqlparser.EDbVendor;
import gudusoft.gsqlparser.TGSqlParser;
public class TestGSP {
public static void main(String[] args) {
TGSqlParser parser = new TGSqlParser(EDbVendor.dbvmssql);
parser.setSqltext("select a from b where c = d");
parser.parse();
}
}
有人知道是什么导致了这个问题以及如何避免它吗
编辑 我使用全新的Windows Server 2008 R2,并使用不同的RAM/JVM设置运行测试程序: e、 g.:
java-Xmx1G-classpath“\.\gsp.jar”com.stackoverflow.TestGSP
+--------------+-----------+----------------+
| Java version | RAM in GB | Duration in ms |
+--------------+-----------+----------------+
| 1.7.0_79 | 1 | 33438 |
| 1.7.0_79 | 2 | 33640 |
| 1.7.0_79 | 4 | 33484 |
| 1.8.0_66 | 1 | 5437 |
| 1.8.0_66 | 2 | 5563 |
| 1.8.0_66 | 4 | 5703 |
+--------------+-----------+----------------+
如果我在OS X上运行相同的测试,我会得到以下持续时间:
+--------------+-----------+----------------+
| Java version | RAM in GB | Duration in ms |
+--------------+-----------+----------------+
| 1.7.0_79 | 1 | 1024 |
| 1.7.0_79 | 2 | 999 |
| 1.7.0_79 | 4 | 968 |
| 1.8.0_65 | 1 | 601 |
| 1.8.0_65 | 2 | 601 |
| 1.8.0_65 | 4 | 603 |
+--------------+-----------+----------------+
更改JVM版本有帮助,但增加RAM并不能解决问题。您是从网络共享加载类还是类似的东西?@Stephen:不是,类和JAR是本地的。我们使用Tomcat作为应用服务器,JAR在WEB-INF/LIB中。您有足够的RAM吗?说真的,我认为服务器和配置方式的问题。。。本质上不是Java。@StephenC服务器总共有6GB RAM,2GB分配给web应用程序进程。我将用更多的内存重新运行我的测试。我也不认为这主要是Java的问题,而是Windows的问题。@StephenC我用一些措施更新了我的问题