CentOS 5.x和CentOS 6.x限制单个用户线程数上限的不同行为

2024-01-09 14:08

本文主要是介绍CentOS 5.x和CentOS 6.x限制单个用户线程数上限的不同行为,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用HiveServer的过程中,通过一个Java程序向其并发提交多个Job,我们发现在同时提交的任务较多的时候,程序就会莫名其妙地卡住,并报出内存溢出(OOM)的错误,但是经过排查,系统还有数十GB的内存处于FREE状态,JVM的内存上限也非常大,所以可以断定问题的原因并不是因为内存不够,而有其它原因。

根据以往的经验,我们在部署服务器的时候,会设置一个系统最大打开文件数量和系统最大进程(线程)数,这个值我们在root用户下做了如下设置(设置在/etc/security/limits.conf文件中):

[plain] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. *                -       nproc           1024000  
  2. *                -       nofile          1024000 
这样的话,root用户能开启的最大进程(线程)数量就是1024000。但是这个设置能否继承到其它用户的设置上却在CentOS 5.8与CentOS 6.4之间有了差别:


首先,在CentOS 5.8上:

[plain] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [root@monet00 ~]# useradd testuser  
  2. [root@monet00 ~]# su - testuser  
  3. [testuser@monet00 ~]$ ulimit -u  
  4. 1024000  
  5. [testuser@monet00 ~]$ ulimit -u  
  6. 1024000 
可以看到,新增加的用户成功继承了root设置的系统设置。


然后,在CentOS 6.4上却是:

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [root@etl-1 ~]# useradd testuser  
  2. [root@etl-1 ~]# su - testuser  
  3. [testuser@etl-1 ~]$ ulimit -u  
  4. 1024 
就是因为这个原因,我们在6.4版本的CentOS上,虽然设置了系统的最大线程数是1024000,但是对于运行HiveServer的hive用户而言,它能够开启最大进程(线程)数仍然是默认的1024个,这样就导致,任务提交比较密集的时候,会出现莫名其妙的失败。至于解决办法,就是加入以下配置,明确对hive用户的配置:
[plain] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. hive   - nofile 1024000  
  2. hive   - nproc  1024000 
这样,在我们放大了提交JOB的并行压力之后,系统也能够完美地运行成功。

从这件事情上可以看出,经验固然重要,但是不能把自己关在这些经验构筑的笼子中,必须常怀怀疑的态度,做完工作之后,一定要再次检查,确保达到我们想要的效果。

这篇关于CentOS 5.x和CentOS 6.x限制单个用户线程数上限的不同行为的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587378

相关文章

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5

Centos环境下Tomcat虚拟主机配置详细教程

《Centos环境下Tomcat虚拟主机配置详细教程》这篇文章主要讲的是在CentOS系统上,如何一步步配置Tomcat的虚拟主机,内容很简单,从目录准备到配置文件修改,再到重启和测试,手把手带你搞定... 目录1. 准备虚拟主机的目录和内容创建目录添加测试文件2. 修改 Tomcat 的 server.X

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线