少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
           java.lang.OutOfMemoryError: unable to create new native thread
          引發此問題的原因有兩個:

          1.線程數超過了操作系統的限制。

          * 使用top命令查看系統資源,如果發現剩余內存很多,而又出現此異常,則基本可以肯定是由于操作系統線程數限制引起的。

          [root@jack ~]# top
          top - 11:36:52 up 5 days,  1:34,  4 users,  load average: 0.00, 0.00, 0.07
          Tasks: 131 total,   1 running, 130 sleeping,   0 stopped,   0 zombie
          Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
          Mem:   3821320k total,  3122236k used,   699084k free,   112636k buffers
          Swap:  6062072k total,   571760k used,  5490312k free,   840728k cached


          * 在linux下,可以通過 ulimit -a 查看系統限制

          [root@jack ~]# ulimit -a
          core file size          (blocks, -c) 0
          data seg size           (kbytes, -d) unlimited
          scheduling priority             (-e) 0
          file size               (blocks, -f) unlimited
          pending signals                 (-i) 29644
          max locked memory       (kbytes, -l) 64
          max memory size         (kbytes, -m) unlimited
          open files                      (-n) 1024
          pipe size            (512 bytes, -p) 8
          POSIX message queues     (bytes, -q) 819200
          real-time priority              (-r) 0
          stack size              (kbytes, -s) 10240
          cpu time               (seconds, -t) unlimited
          max user processes              (-u) 1024
          virtual memory          (kbytes, -v) unlimited
          file locks                      (-x) unlimited

          max user process即系統可創建最大線程數。

          * 可以使用 ulimit -u 4096 修改max user processes的值,但是只能在當前終端的這個session里面生效,重新登錄后仍然是使用系統默認值。

          正確的修改方式是修改/etc/security/limits.d/90-nproc.conf文件中的值。


          [root@jack ~]# cat /etc/security/limits.d/90-nproc.conf
          # Default limit for number of user's processes to prevent
          # accidental fork bombs.
          # See rhbz #432903 for reasoning.

          *          soft    nproc     1024

          2.系統內存不足
          如果通過top命令確認到是內存不足,則可以通過java啟動參數 -Xss修改每個線程棧大小。減小此參數,可以提高最大線程數。當然,要保證你的線程使用的內存不會超過這個數。

          當然,如果不是因為系統級別的問題,那就的優化程序了,檢查有沒有泄露的內存,有沒有業務邏輯存在大量并發等等。
          posted on 2014-12-15 12:08 abin 閱讀(443) 評論(0)  編輯  收藏 所屬分類: JVM
          主站蜘蛛池模板: 安义县| 台前县| 夏邑县| 遂昌县| 罗山县| 湘乡市| 崇明县| 开江县| 喀喇沁旗| 沙河市| 青田县| 焦作市| 宜州市| 广汉市| 杂多县| 阿克陶县| 金坛市| 青铜峡市| 马龙县| 长垣县| 西乌珠穆沁旗| 盐山县| 灵川县| 北安市| 外汇| 南乐县| 银川市| 大余县| 大同县| 竹溪县| 扎鲁特旗| 宁强县| 宁海县| 新宁县| 梁河县| 布尔津县| 苗栗市| 秀山| 喀什市| 景谷| 会宁县|