少年阿賓

          那些青春的歲月

            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
          主站蜘蛛池模板: 西乡县| 张家港市| 孙吴县| 滕州市| 靖安县| 通江县| 新郑市| 镇康县| 长子县| 会同县| 关岭| 孟连| 廊坊市| 盘山县| 庆云县| 岑巩县| 华池县| 务川| 亚东县| 托克逊县| 乳源| 峨眉山市| 平塘县| 阜阳市| 横山县| 泌阳县| 白山市| 达日县| 宁津县| 阜城县| 白河县| 富裕县| 曲水县| 信丰县| 石屏县| 阳曲县| 铜山县| 蒙阴县| 临洮县| 新巴尔虎右旗| 嘉峪关市|