您是否已检查进程是否有足够的内存?当进程内存不足时,也会发生分段错误。我还将检查交换文件的配置。几年前,我在Java 8中遇到了无法解释的段错误,它也以某种方式调整大小或分配方法。就我而言,操作系统的交换文件的大小设置为零。
使用Java 14的单个cpu arm7(32位)设备上的Java应用程序偶尔会崩溃在负载下运行了几个小时之后,并且在ThreadLocalAllocBuffer::resize()
中始终失败
崩溃,这就是为什么我转向Java 14尝试解决问题的原因。--------------- T H R E A D --------------- Current thread (0xb6582a30): VMThread "VM Thread" [stack: 0x7b716000,0x7b796000] [id=3625] _threads_hazard_ptr=0x7742f140 Stack: [0x7b716000,0x7b796000], sp=0x7b7946b0, free space=505k Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code) V [libjvm.so+0x48015e] ThreadLocalAllocBuffer::resize()+0x85 [error occurred during error reporting (printing native stack), id 0xb, SIGSEGV (0xb) at pc=0xb6b4ccae]
现在这肯定是JVM中的错误,但是由于它不是标准Java平台之一,而且我没有简单的测试用例,因此我看不到它很快就会得到修复,因此我正在尝试解决该问题。还值得注意的是,当我使用Java 11时,它与ThreadLocalAllocBuffer :: accumulate_statistics_before_gc()
由于TLAB的问题是,一种解决方案是用-XX:-UseTLAB
禁用TLABS,但这会使代码在已经很慢的机器上运行得更慢。
所以我认为另一种解决方案是禁用-XX:-ResizeTLAB
的大小调整,但是随后我需要知道计算出合适的大小并使用-XX:TLABSize=N
指定该大小。但是我不确定N
我尝试将-XX:TLABSize=1000000
设置为我觉得很大吗?
我有一些设置为]的日志记录>
中失败。 [-Xlog:tlab*=debug,tlab*=trace:file=gc.log:time:filecount=7,filesize=8M
但是我不太了解输出。
[2020-05-19T15:43:43.836+0100] ThreadLocalAllocBuffer::compute_size(132) returns 250132 [2020-05-19T15:43:43.837+0100] TLAB: fill thread: 0x0026d548 [id: 871] desired_size: 976KB slow allocs: 0 refill waste: 15624B alloc: 0.25725 1606KB refills: 1 waste 0.0% gc: 0B slow: 0B fast: 0B [2020-05-19T15:43:43.853+0100] ThreadLocalAllocBuffer::compute_size(6) returns 250006 [2020-05-19T15:43:43.854+0100] TLAB: fill thread: 0xb669be48 [id: 32635] desired_size: 976KB slow allocs: 0 refill waste: 15624B alloc: 0.00002 0KB refills: 1 waste 0.0% gc: 0B slow: 0B fast: 0B [2020-05-19T15:43:43.910+0100] ThreadLocalAllocBuffer::compute_size(4) returns 250004 [2020-05-19T15:43:43.911+0100] TLAB: fill thread: 0x76c1d6f8 [id: 917] desired_size: 976KB slow allocs: 0 refill waste: 15624B alloc: 0.91261 8085KB refills: 1 waste 0.0% gc: 0B slow: 0B fast: 0B [2020-05-19T15:43:43.962+0100] ThreadLocalAllocBuffer::compute_size(2052) returns 252052 [2020-05-19T15:43:43.962+0100] TLAB: fill thread: 0x76e06f10 [id: 534] desired_size: 976KB slow allocs: 4 refill waste: 15688B alloc: 0.13977 1612KB refills: 2 waste 0.2% gc: 0B slow: 4520B fast: 0B [2020-05-19T15:43:43.982+0100] ThreadLocalAllocBuffer::compute_size(28878) returns 278878 [2020-05-19T15:43:43.983+0100] TLAB: fill thread: 0x76e06f10 [id: 534] desired_size: 976KB slow allocs: 4 refill waste: 15624B alloc: 0.13977 1764KB refills: 3 waste 0.3% gc: 0B slow: 10424B fast: 0B [2020-05-19T15:43:44.023+0100] ThreadLocalAllocBuffer::compute_size(4) returns 250004 [2020-05-19T15:43:44.023+0100] TLAB: fill thread: 0x7991df20 [id: 32696] desired_size: 976KB slow allocs: 0 refill waste: 15624B alloc: 0.00132 19KB refills: 1 waste 0.0% gc: 0B slow: 0B fast: 0B
我的Java应用程序在单个使用Java 14的cpu arm7(32位)设备上的Java应用程序在负载下运行多个小时后偶尔崩溃,并且始终在ThreadLocalAllocBuffer :: resize(...
您是否已检查进程是否有足够的内存?当进程内存不足时,也会发生分段错误。我还将检查交换文件的配置。几年前,我在Java 8中遇到了无法解释的段错误,它也以某种方式调整大小或分配方法。就我而言,操作系统的交换文件的大小设置为零。
您在错误日志文件的顶部看到什么错误?您仅复制了单线程的信息。