Trafodion Troubleshooting-java.lang.Out OfMemoryError: unable to create new native thread

本文详细记录了EsgynDB数据库在运行过程中遇到的OutOfMemoryError异常,具体表现为无法创建新的本地线程。通过调整mxosrvr的heapsize设置,将JVM_MAX_HEAP_SIZE_MB参数从128增加到1024,并在所有节点上同步此更改,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象

EsgynDB节点的sql日志中报错java.lang.Out OfMemoryError: unable to create new native thread,具体信息如下,

2020-03-27 23:22:28,910, ERROR, SQL.EXE, Node Number: 0, CPU: 0, PIN: 45539, Process Name: $Z0000001DG3,,,Java exception in File:../executor/HBaseClient_JNI.cpp, Line:
7329 Method:HTableClient_JNI::fetchRows() TableName:TRAFODION.SCHEMANAME.TABLENAME java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.Out
OfMemoryError: unable to create new native thread
java.util.concurrent.FutureTask.report(FutureTask.java:122)
java.util.concurrent.FutureTask.get(FutureTask.java:192)
org.trafodion.sql.HTableClient.fetchRows(HTableClient.java:1323) Caused by
java.lang.RuntimeException: java.lang.OutOfMemoryError: unable to create new native thread
org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:218)
org.apache.hadoop.hbase.client.ClientSmallScanner.loadCache(ClientSmallScanner.java:259)
org.apache.hadoop.hbase.client.ClientSmallScanner.next(ClientSmallScanner.java:233)
org.apache.hadoop.hbase.client.AbstractClientScanner.next(AbstractClientScanner.java:70)
org.trafodion.sql.HTableClient$ScanHelper.call(HTableClient.java:305)
org.trafodion.sql.HTableClient$ScanHelper.call(HTableClient.java:303)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748) Caused by
java.lang.OutOfMemoryError: unable to create new native thread
java.lang.Thread.start0(Native Method)
java.lang.Thread.start(Thread.java:717)
java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957)
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1367)
org.apache.hadoop.hbase.client.ResultBoundedCompletionService.submit(ResultBoundedCompletionService.java:171)
org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.addCallsForCurrentReplica(ScannerCallableWithReplicas.java:322)
org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:187)
org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:62)
org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
org.apache.hadoop.hbase.client.ClientSmallScanner.loadCache(ClientSmallScanner.java:259)
org.apache.hadoop.hbase.client.ClientSmallScanner.next(ClientSmallScanner.java:233)
org.apache.hadoop.hbase.client.AbstractClientScanner.next(AbstractClientScanner.java:70)
org.trafodion.sql.HTableClient$ScanHelper.call(HTableClient.java:305)
org.trafodion.sql.HTableClient$ScanHelper.call(HTableClient.java:303)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

解决

从报错信息看,是因为OutOfMemory导致无法创建native thread,于是怀疑可能是mxosrvr的heap size设置不够,查看ms.env中JVM_MAX_HEAP_SIZE_MB发现值设置为128。

[trafodion@node01 trafodion]$ cat ms.env| grep HEAP
JVM_MAX_HEAP_SIZE_MB=128
ESP_JVM_MAX_HEAP_SIZE_MB=128

改为1024并同步各节点后重启数据库。

### Coverity Connect 错误分析与解决方案 当访问 `https://coverity01-cn.swf.i.mercedes-benz.com:443/get-data-url.cgi` 出现错误时,可能的原因包括网络连接问题、权限不足或服务器端配置不正确。以下是详细的排查和解决方法: #### 1. **验证网络连通性** 确保客户端能够通过 HTTPS 协议成功连接到目标 URL。可以使用以下命令测试网络连通性和 SSL 配置: ```bash curl -k https://coverity01-cn.swf.i.mercedes-benz.com:443/get-data-url.cgi ``` 如果上述命令返回 HTTP 响应状态码而非错误,则说明网络层面无明显问题[^1]。 #### 2. **检查证书有效性** 由于目标地址使用了 HTTPS 加密传输协议,需确认其 SSL/TLS 证书的有效性。可以通过浏览器或其他工具加载页面并查看证书详情。如果存在自签名证书或过期证书的情况,可能导致请求失败。此时可考虑临时忽略证书校验(仅用于调试),例如在 Jenkins 中设置 `-Djavax.net.ssl.trustStore` 参数指向可信的 keystore 文件[^2]。 #### 3. **审查服务端程序状态** 根据描述中的 Linux 脚本退出码 126 (`-bash:./deploy.sh:Permission denied`) 可推测可能是执行权限缺失所致[^3]。对于 Coverity Connect 的 CGI 接口而言,同样需要注意以下几个方面: - 确认 `/get-data-url.cgi` 是否具有正确的文件权限以及所属用户组匹配 Web 服务器进程的身份; - 如果该接口依赖外部库(如 PCRE 正则表达式引擎),还需保证这些资源已正确定位至预期路径下(例如 `/externals/pcre.lib` 或者由包管理器安装的位置)。 #### 4. **日志诊断** 收集来自多个组件的日志记录有助于定位根本原因: - 客户端侧:启用 verbose 输出模式来捕获更多细节信息。 - 应用层:查阅 Tomcat/Jetty 日志了解是否有未处理异常抛出。 - 操作系统级:利用 `journalctl` 查询最近发生的事件链路关联情况。 --- ### 示例代码片段 下面提供一段 Python 请求示例供参考如何安全地调用远程 API 并妥善处置潜在异常情形: ```python import requests url = 'https://coverity01-cn.swf.i.mercedes-benz.com:443/get-data-url.cgi' try: response = requests.get(url, verify=False) # Disable SSL verification temporarily during troubleshooting. if response.status_code != 200: raise Exception(f'Unexpected status code {response.status_code}') except Exception as e: print('Failed to retrieve data:', str(e)) finally: pass ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值