1. 程式人生 > >[Erlang]各種系統限制總結

[Erlang]各種系統限制總結

tuple shel windows bar nta 打開 _for 可用 分配

Erlang本身對進程數,原子長度等沒有限制,但為了提高性能和節省內存,總會在實際實現中和運行環境中作出一些限制。

1、進程數量

缺省情況下同時存在的最大Erlang進程數量不超過2^18=262144個,最大值為2^27-1=134217727,是由於內存的限制在32位環境中這個數量不太可能達到。有效範圍是1024-134217727。

怎麽知道實際中使用進程限制?

[plain] view plaincopy技術分享圖片技術分享圖片
  1. C:\>erl
  2. Eshell V5.10.2 (abort with ^G)
  3. 1> erlang:system_info(process_limit).
  4. 262144

通過配置erlang啟動參數(標誌+P)可以改變進程數量限制

[plain] view plaincopy技術分享圖片技術分享圖片
  1. C:\>erl +P 1000000
  2. Eshell V5.10.2 (abort with ^G)
  3. 1> erlang:system_info(process_limit).
  4. 1048576

註意了,erlang實際使用的進程數量限制可能比你設置的要大得多,這是因為erlang運行系統選擇的進程數量限制通常是2的冪。

2、分布式節點數量

節點名稱限制:

一個節點的遠程節點的最大數目是由可用於節點名稱atom的最大數目的限制,換句話說,節點名稱限制數量取決於atom的最大數量。另外,節點名稱長度也和atom有關,不能超過255個字符。

節點連接限制:

能夠同時連接的最大節點數是由節點名稱限制,可用端口限制,或者可用socket限制共同決定。

3、atom的最大數量

設置erlang系統最大能夠處理的原子(atom)數量,默認是1048576

通過配置erlang啟動參數(標誌+t)可以改變進程數量限制

[plain] view plaincopy技術分享圖片技術分享圖片
  1. C:\>erl +t 1024
  2. Eshell V5.10.2 (abort with ^G)

4、一個atom的字符個數限制

一個atom最多能有255個字符

5、ets表的數量限制

默認值是1400,可以通過環境變量ERL_MAX_ETS_TABLES修改,或者配置erlang啟動參數(標誌+e)

[plain] view plaincopy技術分享圖片技術分享圖片
  1. C:\>erl +e 2000
  2. Eshell V5.10.2 (abort with ^G)

[plain] view plaincopy技術分享圖片技術分享圖片
  1. /******** 無情的分割線 ********* /
  2. 作者:沒有開花的樹
  3. 博客:blog.csdn.net/mycwq
  4. / ******* 無情的copy *********/

6、一個tuple中最大元素數量

2^26=67108863個,事實上,由於可用內存的限制一般很難達到這個數量

7、二進制數據(binary)的大小限制

32位機器上最大不超過 2^29-1 = 536870911 個字節

64位機器上最大不超過 2^61-1 = 2305843009213693951 個字節

如果超出限制,erlang位語法(bit syntax)將無法工作,直接拋出 system_limit 異常。

8、一個Erlang節點最大分配的數據空間大小

Erlang運行時系統可以使用到32(或64)位地址空間,事實上,操作系統對單個進程的使用空間做了限制。

9、同時打開的端口數量限制(Open ports)

erlang對同時打開的端口數量做出了限制。默認是65536,Windows下是8096。有效值範圍是1024-134217727。

[plain] view plaincopy技術分享圖片技術分享圖片
  1. C:\>erl
  2. Eshell V5.10.2 (abort with ^G)
  3. 1> erlang:system_info(port_limit).
  4. 8192

可以通過環境變量ERL_MAX_PORTS修改,或者配置erlang啟動參數(標誌+Q)修改

[plain] view plaincopy技術分享圖片技術分享圖片
  1. C:\>erl +Q 10000
  2. Eshell V5.10.2 (abort with ^G)
  3. 1> erlang:system_info(port_limit).
  4. 16384

註意了,erlang實際使用的端口數量限制可能比你設置的要大得多,這是因為erlang運行系統選擇的端口數量限制通常是2的冪。

10、同時打開的文件和socket數量限制

能同時打開的最大文件和socket數量取決於最大能打開的端口數量,以及操作系統的設定和限制

11、函數的參數個數限制(包括匿名函數)

255

12、dets表存儲限制

單個dets文件大小不能超過2G,在64位的系統也有此限制,mnesia也受到這個限制

[Erlang]各種系統限制總結