在Windows Server 2008 R2上加载缓慢的Java类

时间:2015-10-27 09:43:19

标签: java windows windows-server-2008-r2 sql-parser

对于SQL解析,我们在Java Web应用程序中使用General SQL Parser(GSP)。如果我们在带有Java 7的Windows Server 2008 R2上使用GSP部署我们的应用程序,我们会在类加载期间看到100%的CPU峰值,这可能会持续几分钟。在初始类加载之后,一切正常,直到我们关闭应用程序服务器并卸载类:100%CPU峰值返回。 如果我们将相同的代码库部署到Windows Server 2012,Windows 7 Enterprise,OS X或Linux服务器,则没有这样的高峰。在Windows Server 2008 R2上使用Java 8可以略微改善启动。

使用Microsoft的Process Monitor,我们发现从这个jar加载类时浪费了很多时间。 gsp.jar中的类文件被混淆。我们可以排除除了新添加的jar之外的任何其他原因。只需通过解析SQL语句,冷启动时间就会显着增加。禁用防病毒无效。升级到较新的Windows Server版本不是我们所有客户的选择。

我们正在运行此GSP版本:

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

此测试程序需要超过40秒才能执行Windows Server 2008 R2,在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设置运行测试程序:

例如: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并不能解决问题。

0 个答案:

没有答案