zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    计算机编程语言有哪些?
    JS/Jquery遍历JSON对象、JSON数组、JSON数组字符串、JSON对象字符串
    原生js弹力球
    js中的位置属性
    javascript中常见的表单验证项
    深入理解系统调用
    计一次后怕的排错经历
    Oracle 11G ASM新加磁盘无法init disk
    Oracle需要清理的日志
    openstack-neutron
  • 原文地址:https://www.cnblogs.com/shihujiang/p/2802719.html
Copyright © 2011-2022 走看看