檢視原始碼 系統限制

Erlang 語言規範並未對程序數量、原子長度等設定限制。然而,為了效能和節省記憶體的原因,Erlang 語言和執行環境的實際實現中總會存在限制。

  • 程序 - 同時存活的 Erlang 程序最大數量預設為 1,048,576。此限制可以在啟動時進行配置。如需更多資訊,請參閱 ERTS 中 +P 命令列標誌在 erl(1) 手冊頁中的說明。

  • 執行時系統實例上的唯一本地程序識別符 - 在 64 位元系統上,最多可以建立 2⁶⁰ - 1 個唯一的程序識別符,在 32 位元系統上,最多可以建立 2²⁸ - 1 個。

  • 已知節點 - 如果節點 X 上存在來自節點 Y 的任何 pid、port、reference 或 fun(Erlang 資料型別),或者如果 X 和 Y 已連接,則遠端節點 Y 必須為節點 X 所知。一個節點同時/曾經知道的最大遠端節點數量受限於可用的最大原子數量,用於節點名稱。除了節點名稱原子之外,所有關於遠端節點的資料都會被垃圾回收。

  • 已連接節點 - 同時連接節點的最大數量受限於同時知道的最大遠端節點數量、可用的最大 (Erlang) port 數量或可用的最大 socket 數量

  • 原子中的字元 - 255.

  • 原子 - 預設情況下,最大原子數量為 1,048,576。可以使用 +t 選項來提高或降低此限制。

  • 元組中的元素 - 元組中的最大元素數量為 16,777,215(24 位元無號整數)。

  • 二進制的大小 - 在 Erlang 的 32 位元執行時系統中,可以使用位元語法建構或匹配的最大二進制大小為 536,870,911 位元組。在 64 位元執行時系統中,最大大小為 2,305,843,009,213,693,951 位元組。如果超過限制,位元語法建構將會失敗並拋出 system_limit 例外,而任何嘗試匹配過大的二進制都會失敗。從 Erlang/OTP 27 開始,所有其他建立二進制的操作(例如 list_to_binary/1)也會強制執行相同的限制。

  • Erlang 節點分配的總資料量 - Erlang 執行時系統可以使用完整的 32 位元(或 64 位元)位址空間,但作業系統通常會限制單個進程使用較少的空間。

  • 節點名稱的長度 - Erlang 節點名稱的格式為 host@shortnamehost@longname。節點名稱在系統中用作原子,因此 255 的最大大小也適用於節點名稱。

  • 開啟的 port - 同時開啟的 Erlang port 最大數量通常預設為 16,384。此限制可以在啟動時進行配置。如需更多資訊,請參閱 ERTS 中 +Q 命令列標誌在 erl(1) 手冊頁中的說明。

  • 執行時系統實例上的唯一本地 port 識別符 - 在 64 位元系統上,最多可以建立 2⁶⁰ - 1 個唯一的 port 識別符,在 32 位元系統上,最多可以建立 2²⁸ - 1 個。

  • 開啟的檔案和 socket - 同時開啟的檔案和 socket 最大數量取決於可用的Erlang port 最大數量,以及作業系統特定的設定和限制。

  • 函數或 fun 的參數數量 - 255.

  • 執行時系統實例上的唯一參考 - 每個排程器執行緒都有自己的參考集,而所有其他執行緒則有一個共用的參考集。每個參考集都包含 2⁶⁴ - 1 個唯一參考。也就是說,執行時系統實例上可以產生的唯一參考總數為 (NumSchedulers + 1) × (2⁶⁴ - 1)。如果排程器執行緒每奈秒建立一個新的參考,參考最早將在 584 年後重新使用。也就是說,在可預見的未來,它們是足夠唯一的。

  • 執行時系統實例上的唯一整數 - 由 erlang:unique_integer/1 BIF 建立的唯一整數有兩種型別。

    • 使用 monotonic 修飾詞建立的唯一整數包含 2⁶⁴ - 1 個唯一整數的集合。
    • 沒有 monotonic 修飾詞建立的唯一整數包含每個排程器執行緒的 2⁶⁴ - 1 個唯一整數的集合,以及其他執行緒共用的 2⁶⁴ - 1 個唯一整數的集合。也就是說,沒有 monotonic 修飾詞的唯一整數總數為 (NumSchedulers + 1) × (2⁶⁴ - 1)

    如果每奈秒建立一個唯一整數,唯一整數最早將在 584 年後重新使用。也就是說,在可預見的未來,它們是足夠唯一的。

  • 計時器解析度 - 在大多數系統上,為毫秒解析度。如需更多資訊,請參閱 Erlang 中的時間和時間校正 ERTS 使用者指南的計時器 章節。