[Erlang]各種系統限制總結
Erlang本身對進程數,原子長度等沒有限制,但為了提高性能和節省內存,總會在實際實現中和運行環境中作出一些限制。
1、進程數量
缺省情況下同時存在的最大Erlang進程數量不超過2^18=262144個,最大值為2^27-1=134217727,是由於內存的限制在32位環境中這個數量不太可能達到。有效範圍是1024-134217727。
怎麽知道實際中使用進程限制?
[plain] view plaincopy
- C:\>erl
- Eshell V5.10.2 (abort with ^G)
- 1> erlang:system_info(process_limit).
- 262144
通過配置erlang啟動參數(標誌+P)可以改變進程數量限制
[plain] view plaincopy
- C:\>erl +P 1000000
- Eshell V5.10.2 (abort with ^G)
- 1> erlang:system_info(process_limit).
- 1048576
註意了,erlang實際使用的進程數量限制可能比你設置的要大得多,這是因為erlang運行系統選擇的進程數量限制通常是2的冪。
2、分布式節點數量
節點名稱限制:
一個節點的遠程節點的最大數目是由可用於節點名稱atom的最大數目的限制,換句話說,節點名稱限制數量取決於atom的最大數量。另外,節點名稱長度也和atom有關,不能超過255個字符。
節點連接限制:
能夠同時連接的最大節點數是由節點名稱限制,可用端口限制,或者可用socket限制共同決定。
3、atom的最大數量
設置erlang系統最大能夠處理的原子(atom)數量,默認是1048576
通過配置erlang啟動參數(標誌+t)可以改變進程數量限制
[plain] view plaincopy
- C:\>erl +t 1024
- Eshell V5.10.2 (abort with ^G)
4、一個atom的字符個數限制
一個atom最多能有255個字符
5、ets表的數量限制
默認值是1400,可以通過環境變量ERL_MAX_ETS_TABLES修改,或者配置erlang啟動參數(標誌+e)
[plain] view plaincopy
- C:\>erl +e 2000
- Eshell V5.10.2 (abort with ^G)
[plain] view plaincopy
- /******** 無情的分割線 ********* /
- 作者:沒有開花的樹
- 博客:blog.csdn.net/mycwq
- / ******* 無情的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
- C:\>erl
- Eshell V5.10.2 (abort with ^G)
- 1> erlang:system_info(port_limit).
- 8192
可以通過環境變量ERL_MAX_PORTS修改,或者配置erlang啟動參數(標誌+Q)修改
[plain] view plaincopy- C:\>erl +Q 10000
- Eshell V5.10.2 (abort with ^G)
- 1> erlang:system_info(port_limit).
- 16384
註意了,erlang實際使用的端口數量限制可能比你設置的要大得多,這是因為erlang運行系統選擇的端口數量限制通常是2的冪。
10、同時打開的文件和socket數量限制
能同時打開的最大文件和socket數量取決於最大能打開的端口數量,以及操作系統的設定和限制
11、函數的參數個數限制(包括匿名函數)
255
12、dets表存儲限制
單個dets文件大小不能超過2G,在64位的系統也有此限制,mnesia也受到這個限制
[Erlang]各種系統限制總結