TabNine: High memory and CPU usage

While working on rustc, I noticed TabNine and rls regularly consuming 100% CPU each for quite a while. I usually only notice it when I switch to a different virtual desktop when I build rustc, so it’s not only while actually working in vim, but also(?) a while after I stop changing things.

Additionally, the memory usage for TabNine is huge. Currently top shows:

23316 doener 20 0 9964048 4,9g 0 S 0,0 31,2 74:41.38 TabNine

The process was started about 86 hours ago.

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 62
  • Comments: 87 (5 by maintainers)

Most upvoted comments

Hi! I hit an all-time record this morning:

44GB memory

Killed my computer 😦

image

I have to uninstall until this is resolved

Why is this issue closed if it’s obviously still a problem.

@zxqfl could you please re-open this issue? It still seems to be a problem for a lot of people (me included).

I love the functionality TabNine brings, but having to uninstall until this issue is somewhat resolved 😢

image

Using over 3GB of memory on my machine:

screen shot 2019-02-19 at 4 30 19 pm

Can confirm, tabnine 2.1.17 with vim consumes several GB if I leave it open with a few python tabs.

Some of my python projects contains venv directories with virtualenvs that contain quite a few python files, no idea if this related.

@zxqfl please reopen, or should I open a new bug?

I love the VSCode extension but it is already consuming 1.5G after 100 lines of code. I hope it will be fixed at some point.

EDIT: tabnine --version reports TabNine 1.0.10 (x86_64-unknown-linux-gnu).

A fairly simple, though heavy, test case for both this and #24 (they seem like the same issue to me) is OpenWrt. I did a clean checkout of current master (commit 2407b1edccc2f2d426333bd7cc1743c8e4da8dbd) there and ran TabNine manually, asking it for one completion in the OpenWrt source directory, as follows (I pieced this together based on company-tabnine, is there API documentation somewhere?):

$ ./TabNine
{"version": "0.11.1", "request": {"Autocomplete": {"filename": "/path/to/openwrt/Makefile", "before": "hi", "after": "", "region_includes_beginning": false, "region_includes_end": false, "max_num_results": 10}}}
{"suffix_to_substitute":"hi","results":[],"promotional_message":[]}

I left it hanging there since I just needed to point it to the OpenWrt directory.

This gave me 100% CPU usage for eight seconds to start with, which is fair enough since it’s indexing the whole directory for the first time. Memory usage stabilizes at around 300 megabytes (looking at the “RES” column in htop). Then I followed up with building OpenWrt in another shell, using the default configuration because that suffices to exhibit this issue, and with eight CPU cores to make it not take forever (and nice -n19 because I wanted the rest of my system to not suffer too much):

make defconfig
nice -n19 make world -j8

For some background, OpenWrt is a Linux distribution for embedded devices — routers in particular. Its build system first builds “tools”, which include basic things like tar and sed, then the “toolchain” i.e. gcc and company, before it goes on to actually build the whole system.

Of TabNine, I can observe all of the following during even just the “tools” build:

  • Memory usage growing above 1000 megabytes
  • CPU usage hovering around 10–40% but occasionally spiking as high as 300%
  • A peek at strace showing that TabNine is doing all kinds of stuff including calling inotify_add_watch in the build_dir directory, which I should note is under .gitignore

After the “toolchain” build completes, memory usage is at almost 2500 megabytes and user CPU time (as shown by htop) is at about 19 minutes. Since the build has taken around 30 minutes so far, this is over 60% average CPU usage.

In the end, the entire build took me just shy of 44 minutes. At that point TabNine’s CPU time stabilized at 40 minutes and memory usage at nearly 4500 megabytes. I think it’s fair to call both of these “high usage”. Normally at this point I’d pkill TabNine until it bloats up again, but sometimes I’ve missed it until it’s grown to eat so many gigabytes that it’s actually causing trouble for the rest of my system.

This time I also took a look at the number of inotify watches TabNine has registered:

$ grep -c inotify /proc/27260/fdinfo/7
27118

That definitely seems incorrect. Based on this and what I saw with strace, I’d wager that there’s a bug related to processing of .gitignore and similar files: If an entire directory is ignored, I don’t think TabNine should be recursing into it and especially not adding inotify watches therein. That might be the sole cause of both the CPU and the memory usage.

2.1.17 is consuming 3.3 GB of memory (and counting), ~35% CPU. Been running for an hour or so.

Hm… 250+ days ago I posted on this thread of now-53 participants. Sadly due to the ongoing and widespread issues I was forced to abandon TabNine. 😕

Uninstalling, it is taking 26+ GB of ram

Screenshot 2019-12-19 at 11 55 15 PM

TabNine still has huuuuuge CPU usage if I am typing a lot quickly. It consistently whirrs up my laptop’s fans in a few moments.

Same issue here re: memory. 3G for a fairly small java/groovy project.

I reproduced the high memory usage when building OpenWrt. Today I released an update to TabNine which uses 0% CPU while building OpenWrt. The new behaviour is as follows:

  • TabNine initially places a recursive watch on the project root.
  • Whenever TabNine receives a change notification for an ignored path and the notification comes from a recursive watch on a path P, the recursive watch on P is replaced with a non-recursive watch on P and a recursive watch on all non-ignored immediate children of P.

The update is currently available to beta testers. To try it, type TabNine::become_beta_tester, then type TabNine::version to check you have the new version – the new version number is 1.0.14.

If no beta testers report issues, I’ll release it to all users soon.

Thanks again for investigating!

Got some huge amount of memory consumption as well. Will uninstall until its fixed…

@talcodota thank you for your feedback, but I am not using the plugin anymore. It is even possible that the problem is solved as it is quite some time since I used it (6+ months). It was not an IDE, but vim or neovim on a Linux development server.

High memory issues occur on my machine too. Language agnostic. It’s the highest memory consuming process on my computer. Ha!

Still an issue in 2021; using 2GB ram on a python project with a couple hundred lines of code. I’m using a mac

Excessive memory usage on Windows 10 with VSCode’s extension… ~1/1.5G. I’m not experiencing any crash and BSOD but it’s too heavy to use…

image

This is on archlinux.

I have this issue when checking out between versions while working on Python. when the versions are very different from each other I assume TabNine is rebuilding it’s DB but the CPU usage is insane making my laptop almost unusable.

It would be very convenient to have a CPU / RAM limit configuration

I have the same Issue with Linux Debian 10, using Pycharm… Great pluggin, but kill the machine performance!

My development computer has around 8gbs, Tabnine was using around 4gbs of RAM and basically it made it crash

@mkubdev your WSL instance is a Windows-based one?

Sorry for the 1 year reply lol. Yes windows based one. It’s Windows Sub-System Linux. Btw, using Copilot, work like a charm

image

i’m with the same problem on windows

Captura

my tabnine uses too much cpu, although little ram memory, the extension is great, but it has this little great detail

@Limatucano I was struggling at ~1.5gb. I’m at ~500mb like you now. For me it’s a good improvment…

same here, it’s almost passing Google chrome with 20 open tabs.

Same problem!, Tabnine uses a lot of RAM

The memory usage is too high and I get BSOD. Please fix this because your extension is too useful for me. TabNine.exe takes up even more memory than Chromium!

auto completion that took roughly 10GB when perform is not cool. will try later 😃

You can switch to old version which doesn’t have this problem for now. For example, I’m using vim. git clone https://github.com/zxqfl/tabnine-vim ~/.vim/bundle cd ~/.vim/bundle/tabnine-vim git checkout c20d73f3e007d4b8804c344f114eb03b5c9466a3

This version doesn’t have the CPU/MEM problem for me.