少年阿賓

          那些青春的歲月

            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 閱讀(439) 評論(0)  編輯  收藏 所屬分類: JVM
          主站蜘蛛池模板: 平潭县| 平山县| 安平县| 东丰县| 乌拉特后旗| 双桥区| 河东区| 木里| 广平县| 柳州市| 城固县| 武义县| 永州市| 中西区| 晋州市| 怀仁县| 娱乐| 玉树县| 娱乐| 义乌市| 平阴县| 十堰市| 吉安市| 锡林郭勒盟| 公主岭市| 阜平县| 比如县| 县级市| 寻乌县| 乌拉特前旗| 库车县| 桂阳县| 无极县| 雷州市| 琼中| 嘉祥县| 内江市| 东宁县| 益阳市| 修文县| 务川|