Apache Phoenix java.lang.OutOfMemoryError:无法创建新的本机线程

时间:2019-01-31 16:24:14

标签: java hadoop hbase phoenix

我有一个小型的Hadoop群集,其中包含5个数据节点和1个名称节点,所有4核/ 4线程计算机均具有4GB的RAM,一个数据节点具有8GB的RAM。

它们都在运行RHEL 6 x86_64。 HBase版本是1.2,Phoenix版本是4.14

我正在通过Phoenix查询服务器和“瘦” JDBC客户端连接到Apache Phoenix。 Phoenix Query Server在名称节点上运行。

我正在尝试添加约2000个元组,每10分钟添加约25列,该表已经插入了超过200万个元组,但是有时我会收到以下形式的异常:

  

由于:java.lang.OutOfMemoryError:无法创建新的本机线程   [...]原因:AvaticaClientRuntimeException:远程驱动程序错误:RuntimeException:org.apache.phoenix.execute.CommitException:java.lang.RuntimeException:java.lang.OutOfMemoryError:无法创建新的本机线程-> CommitException:java。 lang.RuntimeException:java.lang.OutOfMemoryError:无法创建新的本机线程-> RuntimeException:java.lang.OutOfMemoryError:无法创建新的本机线程-> OutOfMemoryError:无法创建新的本机线程。错误-1(00000)为空

Phoenix Query Server在名称节点上运行,我不确定这是怎么回事。

这不是实际的OutOfMemoryException,但好像它正在创建许多线程并用尽它们吗?

我尝试做一个ps aux,但我看不到Phoenix Query Server进程创建的〜50个线程以上,而afaik确实比正常Linux安装中的线程限制要少。

也许真的内存不足并且没有创建本机线程是一种症状吗?

1 个答案:

答案 0 :(得分:1)

发现我正在编辑的Hadoop进程的用户限制太低

  

/etc/security/limits.conf

使用:

df %>% select(-Year) %>% mutate_all(funs(percentage_of_rent = . /Rent))

它奏效了。我没有看到特定的线程数限制,但是增加了进程数限制就可以了。

我还了解到,集群也需要增加打开文件数限制:

Year

我以这种方式进行设置,以避免将来出现问题。