- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试调试 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/
我刚开始使用 JNI,但遇到以下问题。 我有一个包含简单类的 C++ 库。我从 Java Android 项目中调用了三个 JNI 方法,分别实例化所述类、调用实例化类的方法并销毁它。我保留了对该对象
背景 我有一个 android 项目,它使用 JNI(使用 NDK)以 Java 和 C/C++ 进行编码。 我在java端创建了一个Jni java包装器,它将自己完成所有Jni操作,而除了这个包装
我想传递一个java对象的地址,JNI方法应该填充所传递对象的字段。1. java代码传递给定的对象引用。 JNI 方法应该能够缓存这个对象。这是一次性通话。2. 然后,java 对象使用不同的参数重
我本质上是在尝试遵循描述的 SO 解决方案 here , 但我遇到了问题。 这基本上就是我在 JNI 库中所做的事情: handle = dlopen("/data/data/lib/my.packa
我试图实现某种异常处理 一开始我打电话 jni::ExceptionDescribe() 之后我使用了的实现 How to obtain a description of a Java excepti
是否可以从不同 jni 库的另一个方法调用 1 个库的 jni 方法?例如:我有 2 个库 lib_1.so 和 lib_2.so。 我想从 lib_2.so 调用 lib_1.so 的方法 get_
我想在native方法中使用动态注册,所以我需要设置JNI_onLoad功能。我只是写了一个函数来获取两个数字的总和。但是,它无法正确构建。我该如何更正错误? 这是我的 *.cpp 文件,我将此文件命
我已经为 C 头文件制作了一个 make 文件,它工作正常,但是说 JNICALL 和 JNIEnv 存在语法错误,但我已经弄明白了这是因为头文件中的类型。 Image of the failure
我需要实现一个本地方法,比方说“public native void someFunc();”。我有两个库,libabc.so 和 libdef.so。 Java 使用 System.loadLibr
背景 我正在 eclipse 中为 android 开发一个应用程序,现在我遇到了一个问题,我需要你的帮助。所以我必须从 JAVA 应用程序调用用 C 编写的函数。但是在我编写代码的过程中,我有一些问
我正在使用 Android 上的 Java native 接口(interface)将当前 Activity 传递给 native 方法。但我没有使用类似 JNI 的函数名称来执行此操作。我正在手动注
我正在使用 JNI,我想知道是否可以通过 delegate 进行通信。 例如: Kotlin typealias MessageReceived = (msg: String) -> Unit ext
看来我对 JNI 的运气并不好。我正在等待我买的书到货,但现在是试错法。 我正在使用 JNI 来实现 Lua 求值器。 evaluatorNew() 只是创建一个新的 Evaluator() 对象,创
我有下面的代码,我想调用在同一个源文件中实现的函数,在本例中使用 C 语言: JNIEXPORT jstring JNICALL MyClass_get_1Uname__C (JNIEnv *env,
硬件手机和平板电脑内存太少,但 HAXM 工作正常? 我的基本问题是我的应用程序(很可能是我的 Java 应用程序加载的 JNI 动态库)太大。如果未使用硬件电话和模板调用 JNI 指令,Java 应
我正面临崩溃 JNI WARNING : 0x44f81e80 is not a valid JNI reference, in Ldalvik/system/NativeStart;. run()v
我移植了很多数学知识。我正在使用 over to c++ from java 并看到这样做有很大的性能提升,但我无法弄清楚要使用什么 jni 函数来摆脱我不再需要的变量。例如,我知道当您的 jni 方
我正在使用 JNI 调用一个静态 java 方法,该方法又创建一个 Swing JFrame 并显示它。代码相当简单,Java 代码独立运行(即 java StartAWT 做它应该做的事),而当使用
我正在尝试创建一个新线程,因此我将 VM 从我的方法初始化(从 Java 调用)传递到我的新线程。在线程中,我调用 AttachCurrentThread 并获取 JNIEnv* env。 稍后,我尝
我想知道是否有可能从java调用C++方法。 我非常希望能够从 java 读取内存进程。 我懂c++,但我想使用像java这样的更高级别,但仍然能够侵入进程内存。 有什么线索吗? []的 最佳答案 这
我是一名优秀的程序员,十分优秀!