zoukankan      html  css  js  c++  java
  • 常见的 由于未调整服务器 ulimit 而引起的内存溢出问题

     
    本篇共引起三个问题:
    1、ulimit 的调整(否则将默认进程只能创建1024个线程)
    2、XSS配置的说明(默认线程为1M,此处配置XSS线程所占用内存为246K)
    3、 线程所占用的内存为堆外内存(相比大家也都知晓该问题,本篇也是因为服务内存不足,调整Ulimit后还是存在oom的问题,而最终引起并说明下该线程堆外的问题)
     
     
    注意:(java中每实例化一个线程,则是向操作系统服务器请求实例化一个本地内存,并非是直接使用的JVM中所配置的堆的内存的大小,,需注意,)
    在直接使用线上内存分析时,曾出现类似的一个问题是这样的,
    线上服务器共8G内存,通过 ps -ef|grep java,可以查看共部署了3台服务,
    前两台robot服务,分别配置Xms为2G,我们的core设置JVM参数为-Xms为3G,
    此时则已经吃掉了7G的内存,除去服务器自身再吃掉500M内存,那么此时可供使用的内存仅有
    500M左右,而此时服务器频繁报错异常则为,
     
    不能够创建新的本地线程,最初时怀疑是 linux 服务器所设置的进程可开启线程数较少的原因,查看ulimit -a 发现,服务器的确没有被优化过,默认ulimit -u的参数值为1024,即的确没有调整过linux服务器的最大线程创建数的值,    
          此时通过linux -u调整参数为 10240,在已有的可创建线程数量上乘以10,需要提及一下(此时的,JVM针对单个线程的堆栈占用内存此时配置的是246K,线程所设置的占用内存较小,则
          可以保证所创建的线程的数量越多,这是ok的)
          此时在设置了ulimit参数后,过了一天,重复出现了,本地线程创建失败,内存异常的提示,此时则确认原因为:java线程在实例化创建时,是向服务器操作系统申请内存进行线程的创建,并非是使用的JVM所配置的堆的内存空间进行创建,所以此时问题已经可以很明显了,服务器基本还剩余的500M内存,是不够线程的创建数量的,并且是部署了三个项目的情况下,分别开了三个容器Jetty,
          三个项目同时运行,所开启的线程数,必然是500M内存,所不够的,所以此时的解决方式则是,
           1.申请增加服务器内存,
          2. 重新调整三个容器中JVM的配置参数,
    即调小JVM的堆的内存配置,剩余出较多的服务器内存,用于创建线程时使用,调整了-Xms和-Xmx的堆内存配置,
    当然,既然已经调整了Xmx堆的内存配置,则同步也调整了年轻代,Xmn的配置,
    此处我们的配置比例基本为3:1,即堆内存和年轻代的设置比例
     

  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/zh94/p/11923190.html
Copyright © 2011-2022 走看看