gpt4 book ai didi

java - 在 JNI 客户端应用程序中设置较小的 JVM 堆大小

转载 作者:行者123 更新时间:2023-11-29 13:35:45 25 4
gpt4 key购买 nike

我正在尝试调试 pl/java 的问题,这是一种用于 PostgreSQL 的过程语言。我在 Linux 服务器上运行这个堆栈。

本质上,每个 Postgres 后端(连接进程)都必须启动自己的 JVM,并使用 JNI 来实现。这通常是 pl/java 的一个主要限制,但它有一个特别令人讨厌的表现。

如果 native 内存用完(我意识到这实际上可能不是由于 malloc() 返回 NULL,但效果大致相同),这种失败的处理相当糟糕。由于“ native 内存耗尽”,它会导致 OutOfMemoryError。这会导致 Postgres 后端出现段错误,源自 libjvm.so 和一个 javacore 文件,内容如下:

0SECTION       TITLE subcomponent dump routine
NULL ===============================
1TISIGINFO Dump Event "systhrow" (00040000) Detail "java/lang/OutOfMemoryError" "Failed to create a thread: retVal -1073741830, errno 11" received
1TIDATETIME Date: 2012/09/13 at 16:36:01
1TIFILENAME Javacore filename: /var/lib/PostgreSQL/9.1/data/javacore.20120913.104611.24742.0002.txt
***SNIP***

现在,有一些定义合理的方法可以用 Java 改善这些类型的问题,如下所述:

http://www.ibm.com/developerworks/java/library/j-nativememory-linux/

我认为,如果我可以将最大堆大小设置为远低于默认值的值,那将特别有效。通常,可以按照以下方式做一些事情:

The heap's size is controlled from the Java command line using the -Xmx and -Xms options (mx is the maximum size of the heap, ms is the initial size). Although the logical heap (the area of memory that is actively used) can grow and shrink according to the number of objects on the heap and the amount of time spent in GC, the amount of native memory used remains constant and is dictated by the -Xmx value: the maximum heap size. Most GC algorithms rely on the heap being allocated as a contiguous slab of memory, so it's impossible to allocate more native memory when the heap needs to expand. All heap memory must be reserved up front.

但是,我不清楚如何按照这些步骤进行操作,以便 pl/java 的 JNI 初始化初始化具有较小堆的 JVM;我不能很好地将这些命令行参数传递给 Postgres。所以,我的问题是,如何设置最大堆大小或以其他方式专门控制这些问题?这似乎是 pl/java 的普遍问题,因此我希望能够与 Postgres 社区分享我最终得出的任何解决方案。

请注意,我对 JVM 内部没有经验,通常也不熟悉 Java。

谢谢

最佳答案

根据 slide 19 in this presentation postgresql.conf 可以有参数 pljava.vmoptions,您可以在其中将参数传递给 JVM。

关于java - 在 JNI 客户端应用程序中设置较小的 JVM 堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12405178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com