0

我是 JBOSS 的新手,我有一个 JVM(在 JBoss 下运行)的内存问题,我想看看你能不能帮忙?

我的运行 Teiid 的 JBOSS 服务器在查询一个大表(1.3 亿行,45 列)时内存不足。

以下是一些细节:

Jboss EAP 6.4 with Teiid 8.7.1
It's running on a dedicated AWS Windows Server instance with 244GB ram, 32 processors

我的JVM参数如下:

-server -d64 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+PrintGCDetails -Xms200g -Xmx200g -XX:NewSize=8g -XX:MaxNewSize=8g -XX:SurvivorRatio=8 -XX:MaxDirectMemorySize=10g -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+UseLargePages

Teiid 缓冲区管理器设置:

allow-env-function" => false,
   "async-thread-pool" => "teiid-async",
   "authorization-validator-module" => undefined,
   "buffer-service-encrypt-files" => false,
   "buffer-service-inline-lobs" => true,
   "buffer-service-max-buffer-space" => 500000L,
   "buffer-service-max-file-size" => 150000L,
   "buffer-service-max-open-files" => 64,
   "buffer-service-max-processing-kb" => -1,
   "buffer-service-max-reserve-kb" => -1,
   "buffer-service-max-storage-object-size" => 16777216,
   "buffer-service-memory-buffer-off-heap" => true,
   "buffer-service-memory-buffer-space" => -1,
   "buffer-service-processor-batch-size" => 30000,
   "buffer-service-use-disk" => true,
   "detect-change-events" => true,
   "distributed-cache-jgroups-stack" => undefined,
   "exception-on-max-source-rows" => true,
   "lob-chunk-size-in-kb" => 100,
   "max-active-plans" => 20,
   "max-row-fetch-size" => 20480,
   "max-source-rows-allowed" => -1,
   "max-threads" => 64,
   "policy-decider-module" => "org.jboss.teiid",
   "preparedplan-cache-enable" => true,
   "preparedplan-cache-infinispan-container" => "teiid-cache",
   "preparedplan-cache-name" => "preparedplan",
   "query-threshold-in-seconds" => 600,
   "query-timeout" => 0,
   "resultset-cache-enable" => true,
   "resultset-cache-infinispan-container" => "teiid-cache",
   "resultset-cache-max-staleness" => 60,
   "resultset-cache-name" => "resultset",
   "thread-count-for-source-concurrency" => 0,
   "time-slice-in-milliseconds" => 2000,
   "workmanager" => "default",

正如您所看到的,我已将堆大小分配为 200gb,但每次它仍然会最大限度地使用内存,并且服务器只是因“Full GC(Ergonmics)”错误而挂起。下面是一个示例日志:

[GC (Allocation Failure) [PSYoungGen: 7549952K->838656K(7549952K)] 176791593K->176710678K(208876544K), 64.7327072 secs] [Times: user=1476.97 sys=9.75, real=64.73 secs]
GC (Allocation Failure) [PSYoungGen: 7549952K->838656K(7549952K)] 183421974K->183391750K(208876544K), 68.1115075 secs] [Times: user=1554.99 sys=9.14, real=68.12 secs]
[GC (Allocation Failure) [PSYoungGen: 7549952K->838656K(7549952K)] 190103046K->190019046K(208876544K), 70.2219754 secs] [Times: user=1603.11 sys=9.98, real=70.23 secs]
[GC (Allocation Failure) [PSYoungGen: 7549952K->838656K(7549952K)] 196730342K->196631886K(208876544K), 87.7628514 secs] [Times: user=2007.72 sys=8.92, real=87.76 secs]
[Full GC (Ergonomics) [PSYoungGen: 838656K->0K(7549952K)] [ParOldGen: 195793230K->193496415K(201326592K)] 196631886K->193496415K(208876544K), [Metaspace: 130959K->130959K(139264K)], 429.0076056 secs] [Times: user=1582.83 sys=5.59, real=429.00 secs]
[GC (Allocation Failure) [PSYoungGen: 6711296K->838656K(7549952K)] 200207711K->200111591K(208876544K), 49.8578163 secs] [Times: user=1141.05 sys=3.48, real=49.86 secs]
[Full GC (Ergonomics) [PSYoungGen: 838656K->0K(7549952K)] [ParOldGen: 199272935K->200062941K(201326592K)] 200111591K->200062941K(208876544K), [Metaspace: 130999K->130999K(139264K)], 383.1849674 secs] [Times: user=570.09 sys=7.91, real=383.17 secs]
Full GC (Ergonomics) [PSYoungGen: 6711296K->5262703K(7549952K)] [ParOldGen: 200062941K->201326365K(201326592K)] 206774237K->206589069K(208876544K), [Metaspace: 131005K->131005K(139264K)], 573.4518437 secs] [Times: user=608.89 sys=15.22, real=573.45 secs]
4

1 回答 1

0

没关系。刚刚发现问题是由于为数据源设置了不正确的 JDBC 驱动程序引起的。谢谢。

于 2015-12-17T22:20:10.750 回答