Lỗi Gặp Phải
Bạn đang làm việc giữa chừng, chỉnh sửa code, thì VS Code đột ngột đứng hình. Rồi thông báo này xuất hiện:
Extension host terminated unexpectedly. Please reload the window.
IntelliSense ngừng hoạt động. Syntax highlighting biến mất. Language server không còn nữa. Nhấn "Reload Window" thì tạm ổn — được một lúc. Rồi lại crash tiếp.
Nguyên Nhân Thực Sự
VS Code chạy tất cả extension trong một tiến trình Node.js riêng biệt gọi là extension host. Khi tiến trình đó chết — do exception không được xử lý, tràn bộ nhớ, hoặc lỗi native — VS Code không thể tự khôi phục và ném ra lỗi này.
Các nguyên nhân phổ biến:
- Một extension có bug hoặc rò rỉ bộ nhớ từ từ
- Hai extension xung đột với nhau
- Extension host chạm giới hạn bộ nhớ Node.js trên workspace lớn
- File extension bị hỏng do cập nhật thất bại
- Các module Node.js native không tương thích được đóng gói bên trong extension
- Workspace có 50.000+ file khiến file watcher bị quá tải
Cách Sửa 1: Đọc Log Extension Host Trước Tiên
Đừng vội tắt extension bừa bãi. Hãy tìm nguyên nhân crash thực sự. Mở panel Output:
Ctrl+Shift+U (Windows/Linux)
Cmd+Shift+U (macOS)
Chuyển dropdown từ "Tasks" sang "Extension Host". Tìm stack trace, dòng Error:, hoặc thông báo "out of memory". Chín trong mười trường hợp, đây sẽ cho bạn biết chính xác extension nào đang gây ra vấn đề.
Để đào sâu hơn, mở console Developer Tools:
Help → Toggle Developer Tools → Console tab
Lọc theo Errors và tìm tên extension nào xuất hiện trong output.
Cách Sửa 2: Cô Lập Vấn Đề — Tắt Tất Cả Extension
Khởi động VS Code với tất cả extension bị tắt:
# Từ terminal
code --disable-extensions
# Hoặc từ bên trong VS Code:
Ctrl+Shift+P → "Open New Window with Extensions Disabled"
Hết crash chưa? Nếu hết, chắc chắn do extension gây ra. Vẫn crash dù không có extension? Bỏ qua thẳng đến Cách Sửa 5.
Cách Sửa 3: Dùng Bisect Để Tìm Extension Xấu
Kiểm tra từng extension trong số 30+ cái thì rất mất thời gian. Bỏ qua cách thủ công và dùng tính năng bisect tích hợp sẵn của VS Code:
Ctrl+Shift+P → "Start Extension Bisect"
VS Code sẽ tắt một nửa số extension, rồi hỏi: vẫn còn lỗi không? Bạn trả lời có hoặc không. Công cụ này thu hẹp phạm vi theo O(log n) bước — thường chỉ 5–6 vòng để tìm ra thủ phạm trong 30+ extension.
Sau khi tìm ra, bạn có các lựa chọn:
- Tắt vĩnh viễn extension đó
- Kiểm tra trang GitHub Issues của nó để xem có bản sửa hoặc cách khắc phục đã biết không
- Quay về phiên bản cũ qua panel Extensions → biểu tượng bánh răng → "Install Another Version"
Cách Sửa 4: Xóa Cache Extension
File extension bị hỏng có thể gây crash liên tục ngay cả sau khi cập nhật. Xóa thư mục cache của extension có vấn đề:
Windows:
%USERPROFILE%\.vscode\extensions
macOS/Linux:
~/.vscode/extensions
Tìm thư mục của extension cụ thể (ví dụ: ms-python.python-2024.x.x), xóa nó đi, rồi cài lại từ panel Extensions. Tránh xóa toàn bộ thư mục extensions trừ khi bạn sẵn sàng cài lại tất cả từ đầu.
Cache lỗi thời cũng đáng xóa:
# macOS/Linux
rm -rf ~/.vscode/extensions/.obsolete
# Windows (PowerShell)
Remove-Item "$env:USERPROFILE\.vscode\extensions\.obsolete" -Force
Cách Sửa 5: Cô Lập Extension và Tăng Bộ Nhớ
Hai giải pháp riêng biệt ở đây, đều hữu ích khi bạn đang chạy nhiều extension nặng cùng lúc.
Giải pháp A — Cô lập tiến trình với affinity. Mặc định, tất cả extension dùng chung một tiến trình extension host. Nếu một extension crash, toàn bộ host bị kéo theo. Cài đặt affinity sẽ chuyển các extension cụ thể vào tiến trình riêng, giúp crash được khoanh vùng lại:
{
"extensions.experimental.affinity": {
"vscodevim.vim": 1
}
}
Thêm đoạn này vào settings.json cho bất kỳ extension nào thường xuyên gây sự cố. Số nhóm 1 đưa nó vào một host riêng; dùng 2, 3, v.v. để tạo thêm các nhóm cô lập khác.
Giải pháp B — Tăng giới hạn bộ nhớ Node.js. Với các extension như Pylance, GitHub Copilot, hoặc language server TypeScript lớn, extension host có thể chạm giới hạn bộ nhớ mặc định ~1,5 GB của Node.js. Tăng giới hạn bằng cách chỉnh argv.json:
Ctrl+Shift+P → "Configure Runtime Arguments"
Thêm vào:
{
"js-flags": "--max-old-space-size=4096"
}
Giới hạn được đặt thành 4 GB. Khởi động lại VS Code hoàn toàn sau khi lưu — reload window thôi là không đủ.
Cách Sửa 6: Kiểm Tra Giới Hạn File Watcher (Chỉ Dành Cho Linux)
Trên Linux, workspace có hàng chục nghìn file có thể làm cạn kiệt giới hạn file watcher ở cấp hệ thống và làm mất ổn định extension host. Kiểm tra giới hạn hiện tại của bạn:
cat /proc/sys/fs/inotify/max_user_watches
Giá trị như 8192 là quá thấp cho các dự án lớn. Tăng lên vĩnh viễn:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Kết hợp với cấu hình loại trừ trong .vscode/settings.json để VS Code không theo dõi các thư mục không cần thiết:
{
"files.watcherExclude": {
"**/node_modules/**": true,
"**/.git/**": true,
"**/dist/**": true,
"**/__pycache__/**": true
}
}
Cách Sửa 7: Cài Đặt Lại VS Code Sạch Hoàn Toàn
Vẫn còn crash sau tất cả những bước trên? Bản cài đặt VS Code của bạn có thể đã bị hỏng. Cài lại sạch tốn khoảng 10 phút và loại trừ mọi khả năng cùng lúc:
- Gỡ cài đặt VS Code
- Xóa các thư mục config còn sót lại:
~/.vscodevà~/.config/Codetrên Linux/macOS, hoặc%APPDATA%\Codetrên Windows - Tải và cài đặt phiên bản ổn định mới nhất từ code.visualstudio.com
- Cài lại extension theo từng nhóm nhỏ, chạy thử vài phút giữa mỗi lần cài
Cách Xác Nhận Đã Sửa Được
Hãy làm việc thực tế ít nhất 15–20 phút trước khi kết luận đã sửa xong. Bạn cần kiểm tra:
- IntelliSense và autocomplete phản hồi bình thường
- Không còn thông báo "Extension host terminated"
- Log Output → Extension Host sạch (không có lỗi màu đỏ)
- Các language server (Python, TypeScript, v.v.) duy trì kết nối xuyên suốt
Trên Linux/macOS, bạn có thể theo dõi trực tiếp tiến trình extension host:
watch -n 5 'ps aux | grep extensionHost | grep -v grep'
Process ID ổn định không thay đổi sau vài phút có nghĩa là lỗi crash đã được khắc phục.
Phòng Ngừa
- Luôn cập nhật VS Code — hầu hết lỗi crash được vá trong các bản phát hành nhỏ trong vòng vài ngày
- Kiểm tra lại extension mỗi vài tháng — bất kỳ extension nào không dùng trong 3+ tháng là gánh nặng vô ích nên gỡ bỏ
- Dùng Profiles (VS Code 1.75+) để tạo bộ extension riêng cho từng loại dự án — không mở extension Python trong dự án Go, không dùng công cụ Go trong dự án Python
- Đọc changelog trước khi cập nhật extension — báo cáo lỗi từ cộng đồng thường xuất hiện trong vài giờ sau khi có bản phát hành lỗi
- Loại trừ các thư mục được tạo tự động và có kích thước lớn khỏi file watcher ngay từ đầu —
node_modules,dist,.git, môi trường ảo — trước khi vấn đề xảy ra

