• java.lang.OutOfMemoryError: unable to create new native thread


    短信平台在运行过程中出现了如下错误:java.lang.OutOfMemoryError: unable to create new native thread

    再次分析一下问题原因:

    背景:在短信平台程序中有一个接收线程TheadA,每次接收到网关返回的短信响应后线程TheadA 就会new一个新的线程,去执行数据库操作,

    我今天修改了短信发送的速度,100条/秒.所以理论上每秒钟TheadA回new100新线程去进行数据库处理.由于能创建的线程数是有限的.所以抛出了上图的异常信息.

    在网上搜索了大家做的相关实验性证明,我就不在多次一举了.下面记录一下大家的结论:

    能创建的线程数的具体计算公式如下:
    (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
    MaxProcessMemory 指的是一个进程的最大内存
    JVMMemory JVM内存
    ReservedOsMemory 保留的操作系统内存
    ThreadStackSize 线程栈的大小

    在java语言里,当你创建一个线程的时候,虚拟机会在JVM内存创建一个Thread对象同时创建一个操作系统线程,而这个系统线程的内存用的不是JVMMemory,
    而是系统中剩下的内存(MaxProcessMemory - JVMMemory - ReservedOsMemory)。

    -Xms 为jvm启动时分配的内存,比如-Xms200m,表示分配200M
    -Xmx 为jvm运行过程中分配的最大内存,比如-Xms500m,表示jvm进程最多只能够占用500M内存
    -Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M

    线程的死亡并不意味着线程对象的销毁和回收。线程的死亡指的是当线程的run方法结束后,该线程就无法被重用和启动,但它的对象还存在并且它的属性和方法还一样可以被使用.

    参考来源:

      http://sesame.iteye.com/blog/622670

      http://www.mzone.cc/article/321.html

  • 相关阅读:
    Python的历史
    python excel
    excel xdr wdr
    sql 常用命令
    selenium 配置firefox
    SQL 一直恢复状态解决方法
    sqlserver 学习
    ITCHAT用法
    健身卡属性,以及业务规则,
    安装REDIS
  • 原文地址:https://www.cnblogs.com/shihujiang/p/2802719.html
Copyright © 2020-2023  润新知