huaweicloud / huaweicloud-sdk-java-obs

The OBS SDK for Java, which is used for accessing Object Storage Service
Other
134 stars 116 forks source link

Raise StackOverflowError with latest version sdk (3.23.9.1) #141

Open Shawyeok opened 10 months ago

Shawyeok commented 10 months ago

Runtime JDK 11, with sdk com.huaweicloud:esdk-obs-java-bundle:3.23.9.1

2023-12-08T06:14:55.533Z [ArchiveThread-persistent://data/uu/feature.plain.result.queue-partition-0] ERROR com.xxx.archive.PartitionArchive - Last message archive upload failed, exit message archive
com.obs.services.exception.ObsException: OBS service Error Message. Request Error: java.lang.StackOverflowError
    at com.obs.services.internal.utils.ServiceUtils.changeFromServiceException(ServiceUtils.java:540)
    at com.obs.services.AbstractClient.doActionWithResult(AbstractClient.java:398)
    at com.obs.services.AbstractObjectClient.putObject(AbstractObjectClient.java:284)
    at com.obs.services.AbstractObjectClient.putObject(AbstractObjectClient.java:321)
    at com.xxx.obs.HuaweiObjectStorageService.lambda$putArchive$0(HuaweiObjectStorageService.java:86)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.StackOverflowError
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
    at java.base/java.util.Collections$UnmodifiableCollection.isEmpty(Collections.java:1033)
...

Client putObject code below:

image

Observed once in production, cause currently unknown.

liqiuqiu111 commented 10 months ago

检查jvm参数xss, 建议将xss参数设置为1M。xss是jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M。

Shawyeok commented 10 months ago

检查jvm参数xss, 建议将xss参数设置为1M。xss是jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M。

We do use the default value for xss. According to the stacktrace, it looks like a infinite recursive call, no idea what's happened here.

Shawyeok commented 9 months ago

Related https://bugs.openjdk.org/browse/JDK-8177031