一个老鸟遇到一个稀奇的问题后,如果只是想想,那么可能会失去一次丰富自己的机会。

如果从开始养成一个习惯,把所有难解决的问题都记录下来,面试的时候,也可能是给自己一次机会

***************正文**************

前不久,服务器上老是报内存溢出的异常:Java.lang.OutOfMemoryError: unable to create new native thread。

看到内存溢出第一个想到的就是内存不够,或者代码有问题,为了先解决问题,就设置了下tomcat的内存

JAVA_OPTS="-server -XX:PermSize=1024M -XX:MaxPermSize=2048m -DentityExpansionLimit=64000"

但是经过几个小时的代码review,不存在大对象和重复创建对象的问题。

之后又用jvisualvm 看了下内存的占用情况,GC和内存都正常

结果还是报这个错,后来怀疑是权限问题,使用root用户启动tomcat就好了。

经过运维同事的提醒,用ulimit -u查看了下最大线程数,原来Linux用户默认能够创建的最大线程数是1024,所以才会报这个错误。

下面,介绍一下修改linux系统用户最大线程数限制:

centos6.5/linux系统对线程数量有个最大限制,当达到系统限制的最大线程数时使用账号密码ssh到系统时是无法登陆的,会报Write failed: Broken pipe,在root用户下切换到该用户会报  su: 无法设置用户ID: 资源暂时不可用

1.# su - xxx(普通用户)

su: 无法设置用户ID: 资源暂时不可用

2.# ulimit -u

1024

由此可以看出最大线程数为1024

3.修改最大线程数的配置

# vi /etc/security/limits.d/90-nproc.conf

内容如下:

*          soft    nproc    1024

root      soft    nproc    unlimited

上面可以看除了root用户外的所有用户均限制为1024,因此通过可以注释此行或者将值改大来解决该问题修改完成后保存退出,这样的修改是立马生效的,之后再没出现过内存溢出的异常。



想要提升自己,工作中遇到的问题,更多JAVA技术相关文章,微信扫一扫关注作者公众号

不是所有OutOfMemoryError异常都跟内存有关的更多相关文章

  1. JVM探秘2--详解内存溢出OutOfMemoryError异常

    JVM运行时内存被划分成多个区域,而除了程序计数器之外,其他几个区都会出现OutOfMemoryError异常,主要原因就是对应内存区域的内存不足以再分配内存,一般要么是内存泄漏了要么就是内存参数设置 ...

  2. OutOfMemoryError异常java内存泄漏(Memory Leak)和内存溢出(Memory Overflow)

    本篇文章理解源自于<深入理解java虚拟机>2.4章节 实战:OutOfMemoryError异常   在以下例子中,所有代码都可以抛出OutOfMemoryError异常,但是要区分到底 ...

  3. OutOfMemoryError异常穷举

    本文内容的目的有两个:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容:第二,在工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会 ...

  4. JVM的参数设置与OutOfMemoryError异常关系

    Java堆中存放Object对象数据,例如new出来的Object.当没有任何引用指向某对象时,该对象可能被垃圾回收.有关垃圾回收算法,可参考其他有关文章,网上很多.关于对象引用,按强弱还有强引用,软 ...

  5. 了解OutOfMemoryError异常 - 深入Java虚拟机读后总结

    JVM中的异常发生 Java虚拟机规范中除了程序计数器外,其他几个运行时区域都有发生OutOfMemoryError异常的可能. 本章笔记通过代码来验证Java虚拟机规范中描述的各个运行时区域存储的内 ...

  6. 《深入理解java虚拟机》笔记(3)实战:OutOfMemoryError异常

    一.Java堆溢出 测试代码: /** * <p>Java堆异常测试</p> * <code>VM Args: -Xms20m -Xmx20m -XX:+HeapD ...

  7. 理解 OutOfMemoryError 异常

    OutOfMemoryError 异常应该可以算得上是一个非常棘手的问题.JAVA 的程序员不用像苦逼的 C 语言程序员手动地管理内存,JVM 帮助他们分配内存,释放内存.但是当遇到内存相关的问题,就 ...

  8. 3、实战:OutOfMemoryError异常

    目的:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容:第二,工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢 ...

  9. 剖析Java OutOfMemoryError异常

    剖析Java OutOfMemoryError异常 在JVM中,除了程序计数器外,虚拟机内存中的其他几个运行时区域都有发生OutOfMemoryError异常的可能,本篇就来深入剖析一下各个区域出现O ...

随机推荐

  1. JAVA中Stringbuffer的append( )方法

    Stringbuffer是动态字符串数组,append( )是往动态字符串数组添加,跟“xxxx”+“yyyy”相当‘+’号. 跟String不同的是Stringbuffer是放一起的,String1 ...

  2. 第06组 Alpha冲刺(6/6)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了个人主页模块的接口设计 完善后端的信息处理 GitHub签入记录 接下来的计划 ...

  3. 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)

    在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consisten ...

  4. flask 开发用户登录注册功能

    flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...

  5. Python3基础 yield 创建生成器

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  6. 014-docker-终端获取 docker 容器(container)的 ip 地址

    1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...

  7. 修改LINUX 默认的22端口

    Linux远程端口修改操作手册 一.修改端口前需要检查selinux状态,并把selinux永久关闭 关闭方法: 1. 执行setenforce 0 2.  vi /etc/selinux/confi ...

  8. k8s记录-master组件部署(八)

    在 192.168.0.1 app 用户下执行1)程序准备tar zxvf kubernetes-server-linux-amd64.tar.gzmv kubernetes/server/bin/{ ...

  9. 解决python写入mysql中datetime类型遇到的问题

    解决python写入mysql中datetime类型遇到的问题 刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于 ...

  10. [LeetCode] 774. Minimize Max Distance to Gas Station 最小化加油站间的最大距离

    On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., statio ...