【发布时间】:2013-11-25 07:31:53
【问题描述】:
我试图通过 JDBC API 连接到 voltdb,但总是得到 OutOfMemoryError。我知道,我可以通过增加堆大小来摆脱它,但我想知道,为什么它需要大堆大小?我已经将 1028M 设置为堆大小。
Exception in thread "http-bio-8080-exec-206" java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:213)
at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:143)
at org.voltdb.client.ConnectionUtil.getAuthenticatedConnection(ConnectionUtil.java:118)
at org.voltdb.client.Distributer.createConnectionWithHashedCredentials(Distributer.java:614)
at org.voltdb.client.ClientImpl.createConnectionWithHashedCredentials(ClientImpl.java:171)
at org.voltdb.client.ClientImpl.createConnection(ClientImpl.java:542)
at org.voltdb.jdbc.JDBC4ClientConnection.<init>(JDBC4ClientConnection.java:141)
at org.voltdb.jdbc.JDBC4ClientConnectionPool.get(JDBC4ClientConnectionPool.java:83)
at org.voltdb.jdbc.Driver.connect(Driver.java:91)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
部署.xml
<?xml version="1.0"?>
<deployment>
<cluster hostcount="1" sitesperhost="2" kfactor="0" />
<httpd enabled="true" port="65534">
<jsonapi enabled="true" />
</httpd>
</deployment>
【问题讨论】:
-
嗨,我在 VoltDB 工作。我们不知道使用 JDBC 驱动程序的堆空间有任何问题,因此我们希望您能提供一些额外的背景知识来诊断您遇到的问题。 1)调用代码使用了多少堆? 2)您连接到多少个节点(服务器)? 3) 你使用了多少个 JDBC 驱动实例?
-
4) 你连接到哪个端口?我们有一个理论,这可能是连接到 http 端口的结果。
-
谢谢 Ben,我根据您的文档编写了简单的客户端。我使用的是 8083 端口,配置为 voltdb 端口。我只连接到一台服务器。是那个问题吗?我会尽快给你其他细节。
-
我改为端口 65534,但它仍然给了我 OutOfMemoryError。我只是想运行选民示例,请参阅主帖子编辑中的 deployment.xml。
-
嗨瑞克,感谢您的跟进。我的同事 Izzy 在下面做出了回应。我认为他是对的。数据库连接的默认端口号是 21212,您在 deployment.xml 文件中指定的端口是用于 HTTP/JSON 接口的。
标签: voltdb