Agent của bạn để lại tiến trình phía sau.
AgentsRoom tìm ra chúng.
Một agent AI khởi chạy một tiến trình hệ thống thật cho mỗi công cụ nó gọi. Phần lớn kết thúc trong vài giây. Một số thì không bao giờ, và chính chúng giữ khư khư hàng gigabyte bộ nhớ mà không dùng một chút CPU nào.
Bộ gác tiến trình quét các tiến trình con của agent, đánh dấu những tiến trình đã ngừng tiến triển, chỉ đích danh agent chịu trách nhiệm, và kết thúc chúng bằng một cú nhấp. Không có gì bị tắt sau lưng bạn.
Thứ mà bộ gác thực sự nhìn vào: những tiến trình một agent đã sinh ra, và tiến trình nào trong số đó đã ngừng làm việc.
Một agent AI không phải là một tiến trình. Mỗi lần nó gọi công cụ là một tiến trình thật khởi chạy trên máy bạn: một lệnh tìm kiếm, một lần build, một lượt kiểm tra kiểu, một lượt chạy test, một script. Nhân con số đó với vài agent chạy song song, suốt cả một ngày, và bạn có hàng trăm tiến trình sinh ra rồi chết đi mà bạn chẳng thấy cái nào.
Gần như tất cả đều kết thúc. Vấn đề nằm ở số còn lại. Một lệnh tìm kiếm có mẫu làm nổ bộ máy biểu thức chính quy sẽ không sập và cũng không chậm lại: nó cấp phát bộ nhớ, bị đẩy vào vùng nhớ nén, rồi sống hết đời trong các lỗi trang ở mức 4% CPU. Nó sẽ không bao giờ xong. Sẽ không ai giết nó. Và nếu agent đã khởi chạy nó bị đóng, nó được gán lại cho tiến trình init và trở thành một tiến trình mồ côi mà không còn ai trên máy chịu trách nhiệm nữa.
Đó là lý do máy chậm dần một cách âm thầm. Không có một sự cố kịch tính nào cả, chỉ là sự tích tụ chậm rãi suốt một ngày làm việc, và đúng cái hình dạng đó khiến người ta đổ lỗi nhầm chỗ: máy quá nóng, chạy quá nhiều agent, ứng dụng rò rỉ bộ nhớ. Trong phiên chúng tôi đo, bản thân ứng dụng dùng 2,8 GB trên 91 tiến trình còn tám CLI agent cộng lại là 1,6 GB. Cả hai đều không phải vấn đề.
Bộ gác tiến trình là tấm lưới an toàn. Nó theo dõi những gì agent để lại, cho bạn biết tiến trình nào đang kẹt và ai đã khởi chạy nó, rồi để bạn kết thúc. Nguyên nhân gốc sẽ còn thay đổi: một công cụ khác, một mẫu khác, một nhà cung cấp khác. Tấm lưới thì không cần thay đổi.
Vì sao một cái máy chạy agent AI lại chậm đi
Những con số dưới đây đến từ một phiên đo thật trên laptop 16 GB với tám agent đang chạy. Không có gì ở đây là ước lượng.
Máy đã bật được năm tiếng rưỡi. Hoàn toàn không có vấn đề nhiệt: không ghi nhận throttling nào, pin ở 30,6 C. Load average dao động từ 17 đến 21 trên 8 nhân, và CPU dành 56% thời gian trong nhân hệ điều hành trong khi chỉ rảnh 1,5%. Chính tỷ lệ đó tố cáo mọi thứ. Một cái máy đang làm việc thật thì dành thời gian trong mã người dùng; một cái máy ở 56% thời gian hệ thống là một nhân hệ điều hành chỉ còn biết nén, giải nén và đẩy bộ nhớ xuống swap.
Bảy tiến trình tìm kiếm bị kẹt đang giữ từ 3,9 đến 8,0 GB mỗi cái, tổng cộng chiếm 41,8 GB trên một cái máy có 16 GB RAM. Swap ở mức 22,3 GB trên 23,5, và khoảng 993 GB đã được ghi xuống swap kể từ lúc khởi động. Kết thúc bảy tiến trình đó trả lại 15,5 GB ngay lập tức, không phải khởi động lại một agent nào và cũng không phải khởi động lại ứng dụng.
Lý do không ai bắt được chuyện này bằng tay là vì các công cụ quen thuộc nói dối về nó. Trên macOS, một tiến trình bị kẹt có thể hiển thị 20 MB bộ nhớ thường trú trong khi thực tế đang giữ 8 GB, vì mọi thứ nó chạm tới đều đã đi qua bộ nén bộ nhớ. Chúng tôi đo trực tiếp một tiến trình ở 4,7 GB bộ nhớ thường trú cho một dung lượng thật 14 GB. Kích thước ảo cũng chẳng giúp gì: trên nền tảng đó ngay cả launchd cũng báo khoảng 440 GB kích thước ảo, nên lọc theo nó là đánh dấu cả cái máy.
Vẫn phiên đó, theo từng giờ: những mảng bộ nhớ không còn ai dùng, và chuyện gì xảy ra khi chúng được giải phóng.
Và những tiến trình này có bốn đặc tính bảo đảm rằng ngày mai chúng vẫn còn đó.
Chúng không bao giờ xong
Bộ nhớ của chính chúng nằm trong swap, nên chúng dành thời gian xử lý lỗi trang thay vì tính toán. Một lệnh tìm kiếm khỏe mạnh làm bão hòa một nhân; những cái này nằm ở 4%. Không có lối ra khỏi vòng xoáy đó, và chờ thêm bao lâu cũng vô ích.
Chúng không bao giờ chết
Không có thời hạn tối đa nào cho một lời gọi công cụ. Không có gì trên máy có ý kiến gì về một tiến trình đã nằm im năm mươi phút. Nó sẽ ngồi đó cho tới khi ai đó giết nó hoặc máy khởi động lại.
Chúng sống lâu hơn agent của mình
Đóng tab agent và tiến trình vẫn có thể sống tiếp, được gán lại cho tiến trình init. Từ lúc đó không còn gì nối nó với bất cứ thứ gì: nó là một tiến trình mồ côi, và sẽ không bao giờ có ai đòi lại. Hai trong bảy tiến trình chúng tôi đo đã ở trạng thái đó rồi.
Chúng chồng chất lên nhau
Một cái mỗi lượt kiểm tra, một cái mỗi lần tìm kiếm xui xẻo. Đó là lý do máy chậm dần đều suốt cả ngày, và cũng là lý do khởi động lại có vẻ giải quyết được vấn đề. Nó không giải quyết gì cả, nó chỉ đặt lại bộ đếm về không.
Bộ gác tiến trình làm những gì
Nó theo dõi những tiến trình mà agent của bạn sinh ra, và nó cố tình rất hẹp về những thứ nó dám động vào.
Đo bộ nhớ thật
Không phải kích thước thường trú, thứ báo thiếu vài gigabyte cho một tiến trình bị kẹt. Bộ gác đọc dung lượng thật, tính cả trang đã nén và trang đã bị đẩy xuống swap, nên một tiến trình hiển thị 20 MB mà giữ 8 GB được nhìn đúng bản chất của nó.
Nhìn cả CPU, không chỉ RAM
Chỉ nhìn bộ nhớ thì mọi lần build trên máy bạn đều bị đánh dấu. Bộ gác đo mức dùng bộ xử lý như một tốc độ giữa hai lần quét, nên một tiến trình từng làm việc cật lực rồi mắc kẹt vẫn bị bắt, còn một lần build đang thực sự chạy thì được để yên.
Bắt cả tiến trình mồ côi
Một tiến trình sống lâu hơn agent đã khởi chạy nó sẽ bị báo cáo dựa trên chính nó, vì sẽ không còn ai khác đòi lại nó. Quyền sở hữu được ghi nhớ khi tiến trình vẫn còn gắn với agent, khoảnh khắc duy nhất có thể xác lập được điều đó.
Một cú nhấp để kết thúc
Một huy hiệu trên thanh trạng thái liệt kê từng tiến trình bị kẹt kèm agent đã sinh ra nó, bộ nhớ, tuổi đời và CPU của nó. Kết thúc một cái sẽ tắt luôn mọi thứ nó đã tự tạo ra. Bộ nhớ quay về ngay và các agent của bạn vẫn chạy tiếp.
macOS, Windows và Linux
Mỗi hệ điều hành cần một phép đo khác nhau để nói thật về bộ nhớ: trang nén trên macOS, thường trú cộng swap trên Linux, private commit trên Windows. Cả ba đều đã được cài đặt, không phải dự định.
Gần như không tốn gì
Một ảnh chụp tiến trình mỗi phút, đo được khoảng 40 ms trên một cái máy đang chạy 824 tiến trình. Phép đo bộ nhớ đắt đỏ chỉ chạy khi đã có thứ gì đó trông có vẻ bị kẹt, và không lần quét nào chạy khi không có agent nào hoạt động.
Quy tắc giữ cho nó khỏi báo động giả
Một bộ gác đánh dấu các lần build của bạn là một bộ gác bạn sẽ tắt trong vòng một tuần. Vì thế một tiến trình không bao giờ bị báo cáo chỉ vì bộ nhớ của nó. Nó phải to, nó phải đã sống một lúc, và nó phải đã ngừng dùng bộ xử lý. Cả ba cùng lúc.
Chính điều kiện thứ ba mới làm hết việc. Một lượt kiểm tra kiểu hay một bundler cũng giữ hàng gigabyte trong nhiều phút, nhưng trong lúc đó nó làm bão hòa một nhân. Một tiến trình mắc kẹt trong swap nằm quanh mức 4%, vì nó sống cả đời để chờ lỗi trang thay vì tính toán. Khoảng cách đó chính là thứ phân biệt một cái máy đang làm việc với một cái máy đang chết đuối, và đó là tín hiệu duy nhất phân biệt được chúng một cách đáng tin.
Mức dùng bộ xử lý cũng được đo chứ không phải đọc. Con số mà các công cụ hệ thống đưa ra là trung bình trên toàn bộ vòng đời của tiến trình, vẫn trông rất bận rộn với một thứ đã làm việc hai mươi phút rồi mắc kẹt. Bộ gác so sánh thời gian bộ xử lý đã tiêu thụ giữa hai lần quét, nên thứ nó thấy là phút vừa rồi, không phải giờ vừa rồi.
Cách hoạt động
Bốn bước, mỗi phút một lần, và bước đắt đỏ gần như không bao giờ chạy.
Một ảnh chụp rẻ tiền của cả máy
Mỗi phút, bộ gác chụp một ảnh duy nhất của toàn bộ tiến trình đang chạy và đi hết cây tiến trình bên dưới từng terminal agent. Chi phí đo được trên một cái máy đang chạy 824 tiến trình: khoảng 40 ms. Khi không có agent nào chạy, chuyện này không hề diễn ra.
Lọc ra danh sách nghi phạm
Từ ảnh chụp đó nó chỉ giữ lại những tiến trình con của agent đã sống lâu hơn ngưỡng bạn đặt và không còn dùng bộ xử lý. Trong sử dụng bình thường danh sách này rỗng, và mọi thứ dừng ở đây.
Đo những cái trông có vẻ bị kẹt
Chỉ với danh sách ngắn đó bộ gác mới trả giá cho phép đo bộ nhớ thật, tính cả trang nén và trang đã xuống swap. Một tiến trình nó không đo được thì không bao giờ bị đánh dấu: một ẩn số không phải là một lời kết tội.
Báo cáo, rồi để bạn quyết định
Một huy hiệu xuất hiện trên thanh trạng thái và một thông báo duy nhất cho bạn biết một lần. Bạn mở danh sách, thấy tiến trình đó là gì, nó giữ bao nhiêu, nó kẹt bao lâu rồi và agent nào đã khởi chạy nó, rồi bạn kết thúc nó nếu muốn.
Những thứ nó sẽ không bao giờ động tới
Một công cụ có khả năng kết thúc tiến trình phải rất chặt chẽ về chuyện đâu là việc của nó. Những giới hạn này nằm trong cấu trúc, không phải các tùy chọn mà bạn phải nhớ bật lên.
- Chính CLI của agent. Dù bạn dùng nhà cung cấp nào, bộ gác cũng bảo vệ đúng file nhị phân mà ứng dụng đã dùng để khởi chạy terminal đó. Nó đọc tên này từ chính lệnh khởi chạy chứ không phải từ một danh sách viết cứng, nên một tiến trình con của cùng CLI đó cũng được bảo vệ, ở bất kỳ độ sâu nào.
- Terminal lệnh dev của bạn. Một dev server đang nghỉ khớp đủ mọi tiêu chí của một tiến trình bỏ hoang: to, lâu, không dùng bộ xử lý. Nó cũng chính là tiến trình bạn thực sự muốn thấy chạy. Chỉ terminal của agent mới bị theo dõi, nên dev server của bạn không bao giờ lọt vào khung hình.
- Shell và phần đường ống của chính ứng dụng. Trình trợ giúp terminal và shell mà agent chạy bên trong bị loại trừ ngay từ thiết kế. Chỉ những tiến trình công cụ nằm dưới CLI của agent mới có thể là ứng viên.
- Bất cứ thứ gì nó không nhận nuôi. Con đường duy nhất có thể kết thúc một tiến trình sẽ từ chối mọi tiến trình mà bộ gác không nhặt được từ chính cây tiến trình của một agent. Nó không thể trở thành một cách để tắt thứ gì khác trên máy bạn.
Và không có gì bị kết thúc tự động trừ khi bạn yêu cầu. Mặc định, bộ gác báo cáo những gì nó tìm thấy và bạn quyết định, vì bạn mới là người biết một tiến trình to và im lặng có nằm trong dự tính hay không.
Khi nào nó xứng đáng có chỗ
Mỗi tình huống dưới đây đều có thật, không cái nào là giả định.
Máy chậm hơn lúc 6 giờ chiều so với lúc 9 giờ sáng
Không có một khoảnh khắc nào hỏng hẳn, chỉ là một đà tụt đều suốt cả ngày. Hình dạng đó gần như luôn là tiến trình bị kẹt tích tụ lại, và cũng là hình dạng khó chẩn đoán bằng tay nhất, vì tại bất kỳ thời điểm nào cũng chẳng có gì trông bất thường.
Nhiều agent chạy song song
Bạn chạy càng nhiều agent thì càng có nhiều lời gọi công cụ, và càng nhiều khả năng một trong số đó mắc kẹt. Tỷ lệ hỏng trên mỗi lời gọi thì bé xíu; nhân với một ngày làm việc song song, nó thôi bé xíu.
Một lệnh tìm kiếm không bao giờ quay về
Một mẫu làm nổ bộ máy biểu thức chính quy sẽ cấp phát hàng gigabyte cho một file chỉ vài trăm kilobyte. Agent chờ nó, bạn chờ agent, và cái máy trả giá cho cả hai.
Bạn đóng agent, tiến trình vẫn ở lại
Đóng một tab không phải lúc nào cũng giải phóng được thứ gì. Một tiến trình vốn đã tách rời vẫn giữ nguyên bộ nhớ của nó và mất luôn mối liên hệ cuối cùng với bất cứ thứ gì bạn nhìn thấy trong ứng dụng.
Một chiếc laptop 16 GB
Trên một cái máy dư dả RAM, vài tiến trình bị kẹt có thể ẩn mình rất lâu. Trên một chiếc laptop 16 GB chúng chạm swap rất nhanh, và một khi hệ thống bắt đầu nén bộ nhớ thì mọi agent đều chậm lại cùng lúc.
Trước khi bạn đổ lỗi cho ứng dụng
Khi máy bò lê trong lúc AgentsRoom đang mở, ứng dụng là nghi phạm hiển nhiên. Có con số thật, theo từng tiến trình, kèm agent đã khởi chạy từng cái, sẽ biến một nghi ngờ thành thứ bạn có thể thật sự kiểm chứng.
Bạn là người đặt ra giới hạn
Các giá trị mặc định được đặt thận trọng có chủ đích. Mọi thứ dưới đây nằm trong Cài đặt, mục Terminal, và mỗi mục đều có thể được một agent đọc và thay đổi qua các công cụ MCP của AgentsRoom.
- Theo dõi tiến trình con của agent
- Bật sẵn. Tắt đi thì không còn lần quét nào chạy nữa, không bao giờ.
- Báo cáo khi vượt một ngưỡng bộ nhớ
- Mặc định hai gigabyte. Dưới mức đó, một tiến trình bị kẹt không đáng để làm phiền bạn. Nâng ngưỡng lên trên một máy trạm nhiều RAM, hạ xuống trên một chiếc laptop chật vật bộ nhớ.
- Sau một tuổi đời tối thiểu
- Mặc định năm phút. Đây là thứ giữ cho một tác vụ chậm nhưng chính đáng không bao giờ bị đánh dấu, vì gần như không có thứ gì bạn thật sự cần lại kéo dài năm phút mà không dùng một chút bộ xử lý nào.
- Tự động kết thúc tiến trình bị kẹt
- Tắt sẵn, và đó là một lựa chọn sản phẩm có chủ đích chứ không phải sự dè dặt. Bộ gác đang đưa ra một phán đoán, và chỉ bạn mới biết một tiến trình to và im lặng có nằm trong dự tính hay không. Bật lên thì nó tự hành động, kèm một thông báo sau đó.
Ngưỡng bộ xử lý cố tình không được đưa ra ngoài. Đó là phép đo phân biệt một lần build đang làm việc với một tiến trình bị kẹt, và nó không phải chuyện khẩu vị.
Câu hỏi thường gặp
Vậy có phải AgentsRoom làm máy tôi chậm đi không?
Không, và đó chính xác là lý do tính năng này tồn tại. Trong phiên chúng tôi đo, ứng dụng dùng 2,8 GB trên 91 tiến trình và tám CLI agent cộng lại là 1,6 GB. 41,8 GB kia bị các tiến trình công cụ đã mắc kẹt chiếm giữ. AgentsRoom tình cờ là nơi duy nhất nhìn thấy mọi agent và mọi tiến trình chúng sinh ra, nên cũng là nơi duy nhất có thể phân xử.
Nó có giết mất lần build hay lượt chạy test của tôi không?
Không. Một tiến trình chỉ bị đánh dấu khi nó to VÀ lâu VÀ đã ngừng dùng bộ xử lý. Một lần build đang thực sự chạy sẽ làm bão hòa một nhân, nên nó trượt điều kiện thứ ba và không bao giờ là ứng viên. Điều kiện đó tồn tại chính là để tạo ra sự phân biệt này.
Nó có theo dõi dev server của tôi không?
Không, và sẽ không bao giờ. Một dev server đang nghỉ khớp đủ mọi tiêu chí: nó giữ nhiều bộ nhớ, nó đã chạy hàng giờ, và nó không dùng bộ xử lý giữa hai yêu cầu. Chỉ tiến trình con của terminal agent mới bị theo dõi, nên các lệnh dev của bạn nằm ngoài phạm vi ngay từ thiết kế.
Nó có thể kết thúc chính agent không?
Không. CLI của agent được bảo vệ dù bạn dùng nhà cung cấp nào, và việc bảo vệ dựa trên file nhị phân mà ứng dụng đã dùng để khởi chạy terminal đó chứ không phải một danh sách tên đã biết. Shell và trình trợ giúp terminal của chính ứng dụng cũng bị loại trừ.
Tiến trình mồ côi là gì và vì sao nó được xử lý riêng?
Một tiến trình có cha đã thoát sẽ được gán lại cho tiến trình init của hệ thống. Từ khoảnh khắc đó, không còn gì nối nó với agent đã khởi chạy nó, nên sẽ không ai dọn nó đi. AgentsRoom ghi nhớ quyền sở hữu khi tiến trình vẫn còn gắn với agent, khoảnh khắc duy nhất có thể xác lập được điều đó, nên sau này nó vẫn báo cáo được tiến trình ấy.
Bản thân việc theo dõi tốn bao nhiêu?
Một ảnh chụp tiến trình mỗi phút, đo được khoảng 40 ms trên một cái máy đang chạy 824 tiến trình. Phép đo bộ nhớ đắt hơn chỉ chạy trên những tiến trình vốn đã trông có vẻ bị kẹt, mà trong sử dụng bình thường thì có nghĩa là nó không chạy. Và lần quét hoàn toàn không tồn tại khi không có agent nào hoạt động.
Sao không nhìn thẳng vào cột bộ nhớ trong Activity Monitor?
Vì trên macOS nó báo thiếu vấn đề cả một bậc độ lớn. Một tiến trình đã bị đẩy vào vùng nhớ nén có thể hiển thị 20 MB thường trú trong khi đang giữ 8 GB. Chúng tôi đo trực tiếp một tiến trình ở 4,7 GB thường trú cho một dung lượng thật 14 GB. Kích thước ảo cũng không khá hơn: ngay cả tiến trình hệ thống cũng báo hàng trăm gigabyte.
Nó có chạy với Claude Code, Codex và các CLI khác không?
Có. Bộ gác không biết gì về bất kỳ công cụ hay nhà cung cấp cụ thể nào. Nó theo dõi tiến trình con của bất kỳ terminal agent nào bạn đã mở, và CLI mà nó bảo vệ được đọc từ chính lệnh khởi chạy. Thêm một nhà cung cấp mới không thay đổi gì ở đây.
Nó có chạy trên Windows và Linux không?
Có. Mỗi nền tảng cần một phép đo khác nhau để con số bộ nhớ nói thật: trang nén trên macOS, thường trú cộng trang đã xuống swap trên Linux, private commit trên Windows. Cả ba đều đã được cài đặt.
Nó có kết thúc tiến trình mà không hỏi tôi không?
Không, trừ khi bạn tự bật cái đó lên. Mặc định nó báo cáo những gì tìm thấy, kèm agent, bộ nhớ, tuổi đời và mức dùng bộ xử lý, rồi bạn quyết định. Kết thúc tự động là một tùy chọn, tắt sẵn ngay khi vừa cài.
Chuyện gì xảy ra với agent khi tôi kết thúc một tiến trình của nó?
Agent vẫn chạy tiếp. Lời gọi công cụ của nó nhận về một lỗi thay vì treo mãi mãi, và đó đúng là kết quả bạn muốn: dù sao tiến trình đó cũng chẳng bao giờ xong. Không có gì được khởi động lại và không mất ngữ cảnh nào.
Nó có sửa được nguyên nhân gốc không?
Không, và nó cũng không cố. Nguyên nhân thì thay đổi: hôm nay là một công cụ, ngày mai là một mẫu khác, tháng sau là một nhà cung cấp khác. Đây là một tấm lưới an toàn, được thiết kế để vẫn hoạt động khi nguyên nhân là thứ chưa ai từng thấy.
Có thể bạn cũng quan tâm
Context Canary
Cảnh báo sớm còn lại: nó theo dõi ngữ cảnh của chính agent thay vì cái máy, và báo cho bạn khi một agent bắt đầu trôi dạt, trước khi nó bịa ra file và API.
Terminal dev
Chạy dev server và các lệnh dài của bạn ngay trong AgentsRoom, kèm thông báo khi một lệnh dài kết thúc. Chính những terminal này là thứ bộ gác tiến trình được thiết kế để không bao giờ đụng vào.
Theo dõi trạng thái agent
Nhìn một cái là biết agent nào đang làm việc, agent nào đang chờ bạn và agent nào đang rảnh, mà không phải đọc một terminal nào.
Mức dùng token
Tài nguyên còn lại đáng để mắt tới. Mức tiêu thụ token và hạn mức theo từng agent, để bạn biết lượng dùng của mình đi về đâu.
Chế độ chia đôi
Nhiều agent cạnh nhau trong một cửa sổ, mỗi agent có khung riêng, màu riêng và trạng thái trực tiếp.
CLI Doctor
Khi một agent không khởi chạy được, nó nói cho bạn biết vì sao và cần làm gì, thay vì để lại một terminal trống trơn.
Thôi trả giá cho những tiến trình không ai dùng
AgentsRoom miễn phí tải về, và bộ gác tiến trình bật sẵn ngay từ lần khởi chạy đầu tiên.
Ứng dụng đồng hành: theo dõi agent khi đi đường
Sử dụng Claude, Codex, Antigravity CLI hoặc nhà cung cấp AI khác.
Gửi lỗi và yêu cầu thẳng vào backlog công khai của bạn.
Một cái nhìn về AgentsRoom đang hoạt động.