java最大线程数

问题:java.lang.OutOfMemoryErrorunable to create new native thread

一切都是因为这个问题造成的,当运行hbase程序的时候,出现了这个问题(内存溢出),不能去创建本地线程,第一次遇到,又开始学习新知识了。

首先判断内存的剩余量,打开终端,运行程序,内存还有一些,报错!!

百度:说是系统线程的限定。好,尝试一下,Thread.activeCount(),到了2040左右就崩溃了,知道了错误就开始修改。

影响创建最大线程数的因素:

-Xms  intial java heap size

-Xmx  maximum java heap size

-Xss   the Stack size for each thread

系统的限制   系统可以设置的最大线程数

其计算公式如下所示:

(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads 
MaxProcessMemory 指的是一个进程的最大内存
JVMMemory         JVM内存
ReservedOsMemory  保留的操作系统内存
ThreadStackSize      线程栈的大小

但是发现关掉那些消耗内存的应用程序,但是还是没有什么提高,此时只有系统的限制:

/proc/sys/kernel/pid_max,
/proc/sys/kernel/thread-max,
max_user_process(ulimit -u),
/proc/sys/vm/max_map_count。

终端下输入:ulimit -a方法:

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

file size               (blocks, -f) unlimited

max locked memory       (kbytes, -l) unlimited

max memory size         (kbytes, -m) unlimited

open files                      (-n) 524288

pipe size            (512 bytes, -p) 1

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 2048

virtual memory          (kbytes, -v) unlimited

这是我修改之后的数据,可以发现open files与max user processes数目都增大了(与以前的数据相比),这里因为修改成功了,以前的数据都没有了。这里主要讲解一下在mac OSX captain下面的修改方式。

进入/Library/LaunchDaemons目录,创建以下两个文件:

limit.maxfiles.plist

limit.maxproc.plist

分别在每个文件下面添加以下文件:




  
    Label
    limit.maxfiles
    ProgramArguments
    
      launchctl
      limit
      maxfiles
      524288
      524288
    
    RunAtLoad
    
    ServiceIPC
    
  


  
    
      Label
        limit.maxproc
      ProgramArguments
        
          launchctl
          limit
          maxproc
          2048
          2048
        
      RunAtLoad
        
      ServiceIPC
        
    
  

重启之后,执行ulimit -a 会发现和我上面的结果一样了。

至于原理:launch是启动的意思,这就是系统启动时候所执行的文件,(一切皆文件的原理,我喜欢这句话)。

你可能感兴趣的:(Hbase,mac)