Sửa lỗi "Extension host is unresponsive" — VS Code bị đơ hoặc chậm

intermediate💻 VS Code2026-06-27| Visual Studio Code 1.80+ trên Windows 10/11, macOS 12+, Ubuntu 20.04+

Error Message

Extension host is unresponsive. Do you want to restart it?
#extension-host#hiệu-năng#đơ-máy#vscode

Lỗi Gặp Phải

Bạn đang làm việc thì VS Code đột ngột đơ cứng và một hộp thoại hiện ra:

Extension host is unresponsive. Do you want to restart it?

Nhấn "Restart" giúp được vài phút — rồi lại đơ tiếp. Đôi khi hộp thoại không hiện ra gì cả. VS Code chỉ treo cứng, IntelliSense ngừng phản hồi, và thanh trạng thái hiển thị vòng xoay tải mãi không dứt.

Extension host là một tiến trình Node.js riêng biệt chịu trách nhiệm chạy tất cả các extension đã cài. Khi nó bị deadlock, phần lõi soạn thảo của VS Code vẫn hoạt động — nhưng mọi thứ phụ thuộc vào extension đều tê liệt. IntelliSense, linting, Git decorations, snippets: tất cả biến mất.

Bước 1: Xác Định Extension Gây Ra Lỗi

Đừng vội tắt extension bừa bãi. Trước tiên, hãy xác định chính xác cái gì đang bị treo. Mở Process Explorer tích hợp sẵn:

Help → Open Process Explorer

Tìm bất kỳ tiến trình extension nào có CPU duy trì trên 30–50%, hoặc bộ nhớ tăng vượt 500MB. Tên tiến trình sẽ chứa ID của extension đó.

Nếu bản thân Process Explorer không mở được, hãy chuyển sang Task Manager của hệ điều hành. Trên Windows, lọc theo tiến trình Code.exe hoặc node.exe — cái nào chiếm CPU cao nhất thường chính là extension host. Trên macOS/Linux, chạy top và tìm tiến trình node.

Cách kiểm tra nhanh nhất:

code --disable-extensions

Nếu VS Code chạy mượt mà, chắc chắn có một extension đang gây ra vấn đề.

Bước 2: Dùng Bisect Để Tìm Extension Cụ Thể

Tìm kiếm nhị phân hiệu quả hơn nhiều so với thử từng cái một. VS Code có tính năng này tích hợp sẵn:

Ctrl+Shift+P → Extensions: Start Extension Bisect

VS Code sẽ tắt một nửa số extension và hỏi: "Vấn đề có còn xảy ra không?" Cứ tiếp tục trả lời. Nó sẽ thu hẹp xuống còn một extension trong 4–6 bước — bất kể bạn có bao nhiêu extension đã cài.

Thích kiểm soát thủ công hơn? Tắt một nửa, khởi động lại, kiểm tra. Bật lại nhóm vừa tắt và tắt nhóm còn lại. Lặp lại cho đến khi tìm ra.

Bước 3: Sửa Hoặc Thay Thế Extension Có Vấn Đề

Đã tìm ra rồi. Thử các bước sau theo thứ tự:

  • Cập nhật extension — mở Extensions (Ctrl+Shift+X), tìm extension đó, nhấn Update. Khá nhiều trường hợp extension host bị treo đã được sửa trong phiên bản mới nhất.
  • Cài lại extension — xóa sạch trạng thái bị hỏng mà việc cập nhật thông thường có thể không giải quyết được:
# Qua command line
code --uninstall-extension publisher.extension-name
code --install-extension publisher.extension-name
  • Tắt chỉ cho workspace này — nhấp chuột phải → Disable (Workspace). Extension vẫn hoạt động ở các project khác trong khi bạn tiếp tục điều tra.
  • Báo lỗi cho tác giả — tìm kiếm trong GitHub Issues của extension đó. Rất có thể người khác đã gặp vấn đề tương tự và có cách giải quyết nằm đâu đó trong phần bình luận.

Bước 4: Các Extension Thường Gây Ra Lỗi Này Nhất

Một số loại extension liên tục đứng đầu danh sách nguyên nhân:

  • Language servers (Pylance, ESLint, Java Language Support) — bị deadlock trên các project lớn. Pylance có thể chiếm 100% CPU trên các repo Python có hơn 2.000 file mà không cấu hình đường dẫn exclude.
  • GitLens — gặp khó khăn với các repo có hơn 10.000 commit hoặc lịch sử file nhị phân lớn.
  • Remote Development extensions (SSH, WSL, Dev Containers) — kết nối chậm hoặc bị ngắt khiến extension host hết thời gian chờ phản hồi.
  • Prettier + ESLint dùng cùng nhau — có thể tạo ra vòng lặp format khi lưu file, mỗi cái kích hoạt cái kia liên tục không dừng.
  • GitHub Copilot / IntelliCode — quá trình suy luận mô hình AI rất tốn CPU. Trên máy có ít hơn 8GB RAM, nó có thể làm đình trệ toàn bộ extension host.

Bước 5: Tinh Chỉnh Cài Đặt Extension Host

Tình trạng đóng băng không thường xuyên mà không liên quan đến một extension cụ thể thường sẽ được cải thiện qua thay đổi cấu hình. Mở settings.json (Ctrl+Shift+P → Open User Settings (JSON)) và thêm vào:

// Cô lập một extension cụ thể vào tiến trình host riêng
// — ngăn một extension xấu kéo sập toàn bộ các extension khác
"extensions.experimental.affinity": {
  "publisher.extension-name": 1
},

// Ít gợi ý hơn = ít tải hơn cho extension host
"editor.quickSuggestions": {
  "other": "off",
  "comments": "off",
  "strings": "off"
},

// Tắt thử nghiệm A/B và telemetry của Microsoft
"workbench.enableExperiments": false,
"telemetry.telemetryLevel": "off"

Riêng với language servers, hãy giới hạn phạm vi quét:

// ESLint — chỉ kiểm tra các loại file bạn thực sự dùng
"eslint.probe": ["javascript", "javascriptreact", "typescript", "typescriptreact"],

// Pylance — loại trừ các thư mục có hàng nghìn file
"python.analysis.exclude": ["**/node_modules", "**/.venv", "**/dist", "**/__pycache__"]

Bước 6: Xóa Cache Extension

Bộ nhớ extension bị hỏng gây ra các trường hợp treo mà cài lại vẫn không khắc phục được. Hãy xóa sạch toàn bộ cache:

# Linux / macOS
rm -rf ~/.vscode/extensions/.obsolete
rm -rf ~/.config/Code/Cache
rm -rf ~/.config/Code/CachedData

# Windows (PowerShell)
Remove-Item -Recurse -Force "$env:USERPROFILE\.vscode\extensions\.obsolete"
Remove-Item -Recurse -Force "$env:APPDATA\Code\Cache"
Remove-Item -Recurse -Force "$env:APPDATA\Code\CachedData"

Khởi động lại VS Code sau đó. Cache sẽ được tạo lại khi khởi động lần đầu — hãy chờ 30–60 giây để các extension khởi động hoàn toàn.

Bước 7: Kiểm Tra Các Vấn Đề Ở Cấp Hệ Thống

Extension host là một tiến trình Node.js. Các giới hạn của hệ thống ảnh hưởng trực tiếp đến nó:

  • RAM thấp: Khi còn ít hơn 4GB RAM trống, hệ điều hành bắt đầu swap sang ổ đĩa. Extension host có vẻ bị đơ trong khi chờ bộ nhớ. Đóng bớt ứng dụng, nếu không tình trạng này sẽ tiếp tục lặp lại.
  • Phần mềm diệt virus quét thời gian thực: Các công cụ AV quét thư mục .vscode hoặc workspace khi mỗi lần ghi file có thể chặn các thao tác I/O mà extension phụ thuộc vào. Thêm đường dẫn workspace vào danh sách ngoại lệ của phần mềm AV.
  • Ổ đĩa mạng: SMB và NFS mount không hỗ trợ file watcher một cách ổn định. Các extension theo dõi thay đổi file sẽ hết thời gian chờ. Hãy giữ file project ở ổ đĩa local và đồng bộ riêng.
  • WSL trên Windows: Truy cập xuyên filesystem (Windows ↔ WSL) rất chậm. Nếu file của bạn nằm ở /mnt/c/Users/..., hãy chuyển chúng sang ~/projects/ bên trong WSL — thời gian phản hồi của extension host thường giảm từ vài giây xuống còn mili-giây.

Xác Nhận Đã Sửa Xong

Mở project trước đây hay gây ra lỗi đơ. Sau đó kiểm tra theo danh sách này:

  • Chờ 2–3 phút với một file đang mở — đó thường là khoảng thời gian lỗi treo hay xuất hiện
  • Kiểm tra Help → Open Process Explorer — CPU của extension host nên ở mức dưới 10% khi rảnh
  • Kích hoạt IntelliSense (Ctrl+Space) — phản hồi đầu tiên phải đến trong vòng 1–2 giây
  • Lưu một file — không có vòng xoay, không có "Loading..." dai dẳng trên thanh trạng thái
  • Kiểm tra Git decorations — chúng phải cập nhật trong vòng 3–5 giây sau khi file thay đổi

Không còn hộp thoại nào hiện ra. IntelliSense phản hồi bình thường. Bản sửa lỗi đã có tác dụng.

Tóm Tắt Nhanh

  • Kiểm tra không có extension: code --disable-extensions
  • Tự động tìm lỗi: Ctrl+Shift+P → Extensions: Start Extension Bisect
  • Tải lại extension host mà không cần khởi động lại VS Code: Ctrl+Shift+P → Developer: Restart Extension Host
  • Xem log của extension: Ctrl+Shift+P → Developer: Show Logs → Extension Host
  • Phân tích extension chậm: Ctrl+Shift+P → Developer: Show Running Extensions (hiển thị thời gian kích hoạt của từng extension)

Related Error Notes