VS Code causes 17.10, 18.04 randomly and completely freeze

Please read: See the last bit. I don't believe this is an issue related to Ubuntu, but rather VS Code.

Recently, under 17.10 and 18.04 (I just upgraded today), Ubuntu will randomly and completely freeze. I cannot move the cursor or use the keyboard. Naturally, I have tried switching to a TTY session with no success. Every time, I must resort to SysRq + REISUB, which is (obviously) not preferred.

I have attempted to switch graphics drivers, on the theory that it may be that. I was originally using the open source nVidia driver, and switched to the proprietary to no avail. I'm currently using the open source driver.

All that I typically have open is Firefox (not a ton of tabs loaded) and VS Code, with at most a couple files and a terminal open.

Any ideas?

Update: The system logs show no indication of anything at all happening, let alone something wrong. I don't know if this is related, but sometimes (and especially after booting) programs take a significant amount of time (> 5-10 seconds), even command line programs.

Yet another update! — Even with all GNOME extensions disabled, it still crashed. I tried XFCE, which still crashed.

Summary: Ubuntu completely freezes at seemingly random times, leaving no trace in logs, and is not related to any specific desktop environment or GNOME extensions.

(likely final) update: I'm convinced this is an issue with VS Code. I have been running GNOME for days, with other Electron apps open (Slack, Pulse, etc.), and have not had a single freeze. I have DM'd VS Code on Twitter, and will likely file a bug report as they haven't responded yet.


Solution 1:

So it turns out that this isn't specific to Ubuntu, but I'll post this here anyways for future reference.

Apparently, even though I'm ignoring certain files using the files.exclude setting (notably the ./node_modules directory), VS Code still watches those files for changes.

To solve that, simply copy the list from files.exclude to files.watcherExclude. This will prevent VS Code from searching the many thousands of files that are in node_modules or other similar directories. That way, it will leave some RAM for Chrome to gobble up.

Solution 2:

I just ran into this. Upon launch, in a big project, my system would freeze after ~20 seconds and become unresponsive (Ubuntu 18.04). Running htop while launching VSCode showed that it took all the cores to 100% (i7-8700K), ate all the memory (16gb) and then the swap. The freeze happened moments later. This was happening because of a bad extension, in my case it was CSS Peek.

So try launching vscode with extensions disabled (code --disable-extensions) and see if it still happens. If it doesn't track down the faulty extension and send it to hell.

I had random full freezes happening and spent quite a few hours trying to find out why. On restart the logs were really not helpful. I initially thought it was the nvidia driver, but no - just a VSCode extension.

Solution 3:

I got the same issue in my Ubuntu 16.04.

I did switch off git.autorefresh in the Settings, then it works flawlessly and smoothly

Solution 4:

I've experienced the same problem. Eventually I realized that in my case the problem is running out of memory (I have 8gb ram and just 1gb swap partition on disk). I fixed this by allocating additional swap space using file in my root directory:

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

this will temporary enable additional 8gb of swap for your system. If it will help, here you can read further instructions for enabling new swap constantly.

Another options are: add RAM physically or add/enlarge swap partition.

I used new swap as a file because I got luks+lvm encrypted system and resizing existing swap partition is too complicated and risky in my case.

P.S. I got Ubuntu 18.04

Solution 5:

I had the same issue. To fix this for a particular project you will want to update the .vscode/settings.json to look something like this:

{
  "python.pythonPath": "/usr/bin/python3",
  "files.exclude": {
    "**/.git": true,
    "**/.svn": true,
    "**/.hg": true,
    "**/CVS": true,
    "**/.DS_Store": true,
    "**/node_modules": true,
    "**/.firebase": true
  },
  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/**": true
  }
}