本頁譯自英文文件。指令、識別名稱與範例保持原樣。執行環境 7.24.4 · SDK 2.6.7。 英文原文
記憶體用量
狀態:現行
範圍:現行狀態
上次審閱:2026-09-13
負責人:ax-code 執行環境
AX Code 與語言伺服器、儲存庫建置、瀏覽器,以及任何本機模型執行環境共用這台機器。TypeScript 伺服器或 Rust 分析器所用的記憶體,可能比 AX Code 後端本身還多。那些處理程序提供的是程式碼分析,不是語音服務。把各處理程序的 RSS 加總,可能把共用頁面重複計算。
設定檔
AX_CODE_MEMORY_PROFILE 接受 auto(預設)、low 或 normal。在 auto 中,回報實體 RAM 最多 8 GiB 的主機會選 low;其他主機選 normal。無效的值會使用自動偵測。偵測用的是主機實體 RAM,不是可用 RAM,也不是容器的記憶體上限;在受限的虛擬機器或容器中,必要時請明確選擇 low。請在啟動 AX Code 之前設定這個變數;它不會重新設定已經在執行的後端。
AX_CODE_MEMORY_PROFILE=low ax-code
PowerShell:
$env:AX_CODE_MEMORY_PROFILE = "low"
ax-code
| 行為 | 一般 | 低用量 |
|---|---|---|
| 推測性的語言伺服器啟動與讀取預熱 | 以 AX_CODE_LSP_PREWARM=1 選擇加入 |
略過,即使已設定預熱變數也一樣 |
| 每個 LSP 用戶端先前的原始碼文字快取 | 16 MiB 的保留內容記帳 | 4 MiB 的保留內容記帳 |
| 並行的 LSP 初始化 | 既有的伺服器排程 | 每個後端處理程序一次只初始化一個 |
| 並行的語意操作 | 既有的伺服器預算 | 每個後端處理程序兩個已等待的語意操作,再加上既有的伺服器預算 |
| 健康且閒置的語言伺服器 | 既有生命週期 | 閒置五分鐘後可以關閉,大約每分鐘檢查一次 |
兩種設定檔預設都是需要時才啟動語言伺服器。啟動與一般的檔案讀取,不會觸發推測性的語意預熱。明確的語意導覽、診斷與索引仍會啟動必要的分析,因此第一個語意請求可能花比較久。若主機有足夠餘裕,想恢復推測性的啟動與讀取預熱,請在啟動前同時設定這兩個變數:
AX_CODE_MEMORY_PROFILE=normal AX_CODE_LSP_PREWARM=1 ax-code
只有精確的值 1 會啟用推測性預熱;low 一律抑制它。這個設定不會終止既有伺服器,也不是全面禁止 LSP 啟動:需要診斷的編輯,以及明確的語意與索引操作,仍然會使用語言伺服器。低用量模式的閒置回收是另外一回事。
來源快取也有 1,000 筆的上限。它的記帳包含保守的字串與鍵值配額;它不是 V8 堆積上限,也不是 RSS 上限。放不進快取的檔案,仍會把目前的完整內容與語言伺服器同步。清出快取時,若請求可能還需要該文件,就不會關閉它。
低用量模式是把工作排入佇列,而不是略過分析。第一次使用,或閒置關閉之後再使用,可能花比較久。已選取或已排入佇列的用戶端、待處理的底層 RPC,以及診斷等待,都會受到保護,不會因閒置而關閉。逾時的請求可能讓伺服器端的工作繼續跑:兩個已等待的操作,並不保證語言伺服器內部只有兩項計算。閒置回收之後,診斷清查會標成已降級,因為只重新啟動一個檔案,不能證明先前工作區已完整涵蓋。
這些上限適用於每一個 AX Code 處理程序之內。它們不限制總 RAM,也不協調分開的 AX Code 執行個體,不限制語言伺服器的堆積,也不控制編譯器、瀏覽器或本機模型。模型選擇、必要的提示上下文,以及驗證指令,都保持不變。
工作階段與證據的保留
TUI 會為正在查看的工作階段保留較重的對話紀錄事件。不活躍的工作階段保留摘要、狀態,以及待處理的核准與提問;開啟它們時,會從 SQLite 重新載入已儲存的歷史。一般顯示視窗是 100 則訊息,序列化承載預算為 16 MiB。較舊且已完整的訊息會先釋放。最新一則不可分割的訊息,以及已找回的 Undo 與 Restore 歷史,可以超過軟性預算;TUI 會顯示指示。這些是投影上限,不是持久工作階段歷史或模型上下文的上限。
當 V8 堆積接近硬性上限時,對話紀錄預算會自動縮小(堆積使用到 90% 時,下限為 2 MiB),讓保留集合在處理程序到達 FatalProcessOutOfMemory 之前先釋出;超過 80% 時,TUI 也會顯示警告,建議 /compact 或重新啟動。壓力會在一次完整 GC 之後恢復,但已經清出的歷史在重新載入之前不會回來。
在父訊息之前到達的片段,使用有上限的待處理區(128 個訊息 ID,或 1 MiB)。若必須釋放待處理內容,TUI 會提供從已儲存歷史重新載入的選項。針對已清出訊息的遲到事件,不能永久重建孤兒片段。
證據快取預設使用有上限的記憶體(每個執行個體 128 筆,或 4 MiB 的序列化值)。RocksDB 仍然是選擇加入;只改快取後端,並不會減少模型的工具呼叫。請見 證據快取。
背景指令輸出
未讀的背景輸出使用私有的暫時檔案,而不是為每一個已結束的殼層保留數 MB 的 JavaScript 字串。每個檔案是 2 MiB 的 UTF-8 環形緩衝;超過上限、最舊且未讀的輸出會被捨棄並標示。最多 32 個環形檔,每個處理程序最多保留 64 MiB。磁碟槽位滿了時,最舊的已結束暫存可以過期;作用中殼層的所有權不會被清出。讀取會逐步傳回保留的未讀輸出,並釋放它的磁碟槽位。
登錄允許每個工作階段 16 個作用中殼層、每個處理程序 32 個,並且每個工作階段最多保留 16 筆已結束紀錄、每個處理程序 64 筆。已結束的輸出在 30 分鐘後過期(在存取時檢查,大約每分鐘也檢查一次)。指令與描述的清單是預覽,上限分別是 8 KiB 與 1 KiB;實際執行的指令不會改變。觀察者重播有另外的上限:每個殼層 64 KiB 與 128 筆紀錄,整個處理程序的位元組預算是 2 MiB;不完整的重播會被標示。
bash_output 會把輸出完整性與真正的處理程序結束狀態分開回報。被捨棄、過期或無法讀取的輸出,即使指令以代碼零結束,仍是不完整的驗證證據。使用輸出篩選時,這些通知仍然看得到。找不到紀錄,可能表示它已經被取用或清出;輸出不可用,並不是檢查已經通過的證明。
在 POSIX 上,檔案使用處理程序私有的暫存目錄(0700),檔案權限為 0600。讀取、移除工作階段、保留清理,以及正常的處理程序結束,都會釋放所擁有的檔案。這份暫存不是當機後仍持久的工作階段儲存。強制終止或當機可能留下私有暫存目錄;尚未實作跨處理程序的自動清掃,因此 64 MiB 上限描述的是目前這個處理程序,不是累積下來的當機殘留。檔案系統清理錯誤會被回報,而且不會釋放失敗檔案所保留的配額。有上限的同步檔案 I/O 避免了無上限的寫入佇列,但在緩慢的暫存檔案系統上可能增加延遲。
選擇工作負載
主機受限時,請先使用雲端供應商、一個作用中的程式開發工作階段,以及較小的儲存庫。只有機器還有餘裕時,才執行大型建置與額外的代理程式工作階段。本機推理需要另外的預算,給權重、KV 快取與上下文,以及執行環境額外負擔;雲端供應商的硬體指引並不適用於它。
一般使用請用封裝好的 CLI;pnpm run dev 是貢獻者的來源工作流程,啟動與模組載入的成本不同。請在 Activity Monitor 或平台的處理程序監控中,把 AX Code 與它的語言伺服器、建置子處理程序一起查看。把快取上限調低,並不能建立實體記憶體會固定減少。
這些記憶體變更有決定性的保留測試與語意等價測試。它們尚未以實體 8 GB Mac 的負載測試取得資格。低用量模式並不保證任意專案都能放進 8 GB 的機器。