codota/TabNine

High memory and CPU usage

dotdash opened this issue Β· 87 comments

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.

zxqfl commented

Does it continue after the build stops? This is possibly caused by TabNine picking up all the filesystem events from the build.

That's a lot of memory, a normal amount of usage is 500MB-1GB. Does it go back to a more reasonable level if you restart your editor or type TabNine::restart?

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

image

This is on archlinux.

Using over 3GB of memory on my machine:

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

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

image

@zxqfl Hey there! I was wondering if you have any updates on whether this is something you are working on, something you are currently fixing, or if this is more of a "no fix" kind of situation.

As a paying customer, I just want to know where the author stands on this!

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

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.

zxqfl commented

Thank you for the detailed investigation and analysis. Indeed, TabNine places a watch on every subdirectory, even those which match patterns in .gitignore. This is because the library which TabNine uses to watch directories (notify) and the library which it uses to identify ignored paths (ignore) are different.

I guess the best way to fix this issue will be for TabNine to still use ignore, but to handle recursing into sub-directories itself, allowing it to avoid recursing into .gitignored directories.

PS: You can find API documentation here.

zxqfl commented

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!

zxqfl commented

Closing for now, please re-open if the problem persists.

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

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?

Problem is persisting with TN taking 20% of my RAM at start, and can go up to soft-locking the PC after 45 minutes or so. Fortunately my Fan runs like crazy when I'm close to 100% resources used.
Version 2.1.11 for VSCode.

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.

I just checked top on my development machine (v. 2.1.17):

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
32001 petter    20   0   20.4g  20.0g  11400 S 175.8  63.8 276:55.62 TabNine

20GB resident memory(!)

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.

I'll see what I can do with VSC (sorry, not very fond of vim :p ) and keep you in touch

I can confirm that TabNine V2.1.7 is stable on VSCode and doesn't take a whole lot of resources.

TabNine 2.1.17 uses 1.5 GB of the memory at the initial. Is this the expected behaviour? Isn't it so much?

using TabNine within emacs and the company package leads to an initial memory usage of 3 GB which increases over time. I now disabled the local support and try the cloud facility

How do I downgrade to 2.1.17 with VS Code (windows WSL)

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

44GB memory

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

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

Seybo commented

image

Uninstalling, it is taking 26+ GB of ram

Screenshot 2019-12-19 at 11 55 15 PM

Has anyone found a solution yet?

You can disable Tabnine local feature in Tabnine::config

TabNine::version 2.1.22 still use more than 1GB memory, any solution ?

env:
Centos7+vim+TabNine

sQVe commented

@salanhess Yes. Disable TabNine Local.

git checkout c20d73f3e007d4b8804c344f114eb03b5c9466a3

Thx very much, this version only take 500M mem!

on my ubuntu vps server, i use the vim-tabnine plugin, and today i can not connect to my vps via mosh, after reboot and testing for everything, and turns out it is tabnine which cost up to 65% memory and 74% of cpu!!!!

I try disable Local as mentions above, it's better but still cost 1.5g of men, while my vps only have 4g in total.

i love Tabnine, but seem now i can only use it in my MBP and have to uninstall from my vps.

hope this issue can be solved soom.

thanks

jh0l commented

So you're not going to provide an option to adjust the memory usage of tabnine local so as to incentivise people to buy tabnine professional?

@jh0l Actually, the exact opposite is true:

  1. We have already introduced a significant reduction in the amount of memory TabNine consumes
  2. we are actively working on a lightweight model that will be available as a part of the free plan and will consume much less memory. Just to be clear, the TabNine memory requirements are derived from the inherent memory consumption of a large neural model.
  3. TabNine Professional provides superior code prediction thanks to the GPUs in our cloud servers- this, regardless of memory, is a pretty compelling reason to upgrade!
jh0l commented

Ok I can totally understand that then. Apologies if I seemed at all accusatory, I wasn't aware of how exactly the memory consumption works with your... neural models. I'll try upgrading then!

No worries, thanks @jh0l
We have a free trial for TabNine Pro - don't forget to enter the API key you get and enable TabNine cloud. If memory consumption is high, you may choose to disable TabNine Local.

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.

Too high memory usage on my W10 device. I disabled TabNine Local as well.
tabnine

Excessive memory usage on my Linux mint 20 machine. I am experiencing sudden crashes every two hours or so. I disabled TabNine local.

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!

image
Same here :(

I had to uninstall tabnine because of of this. I usually have more than 6 vscode project open. 6*2G = 12G.

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..

Why is 1GB of usage in the first place? Could we limit it like max_memory_usage = 512M or max_cpu_usage=20% keeping performance?

AI uses a lot of memory.

I really like Tabnine. It allows vscode to function like an IntelliJ-based IDE, but I can’t even press tab for autocomplete (i.e. Emmet), or manually format my code when it’s on.

same, at project start already 1gb memory, after 200 lines of code 1.5gb..

Same problem!, Tabnine uses a lot of RAM

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.

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

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

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

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

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

I also have this problem, but for me it's more controlled
image

Has anyone found the solution?

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

ruv commented

A possible workaround is to limit the memory (and maybe CPU) for the editor and all its sub-processes (i.e., for the process tree).

In Windows, something like Process Governor can be used.

Indeed that is a workaround, but this is absolutely an issue within TabNine. There are numerous reports of this problem, and even after reinstalling Windows the issue persists.

Yeah, we dont need to find a workaround, because they need to resolve this issue. And i dont understand why this issue its closed

Is ~500mb too much for you guys ? @2020 we struggled with 1,5Gb... 500mb is fine for AI.

500MB? I gave up on the plugin when it used > 20GB of resident RAM!
The RAM usage is probably proportional to the size of the indexed code and available RAM.

@ilAYAli Yes! I'm running VSCode from WSL2 and i have no problem anymore with TabNine ! To be honest, I don't know if this is optimization from codata, or it's because i recently add a memory limitation to my WSL2 instance...

To add memory limitation to $wsl2 :

  1. Create a file at %UserProfile%/.wslconfig
  2. Set config :
[wsl2]
memory=6GB # Limits VM memory in WSL 2 to 6 GB
/*processors=5 # Makes the WSL 2 VM use two virtual processors*/

2

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

500MB? I gave up on the plugin when it used > 20GB of resident RAM!
The RAM usage is probably proportional to the size of the indexed code and available RAM.

Hey @ilAYAli,
This should never happen.
Can you please share your logs, so we can investigate this?
type tabnine::logs inside your IDE and send us the log files to support@tabnine.com
Also, name the IDE and the operating system you are using.

Thank you.

@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.

Has this crap been resolved? I had to remove t9 from my neovim workflow because it was making the entire mac unusable. It was the newest version available. masOS 10.15.7.

Captura

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

ET-CS commented

Killed my computer :(

image

I have to uninstall until this is resolved

i also have the same issue. Using over 1GB of memory on my mac.

I also have the same issue. Have to uninstall until the issue is fixed on Windows. I have advice my entire team to remove TabNine from PyCharm. We all have the same issue.

Same here with Doom Emacs on Ubuntu, it eats all the CPU causing the editor to stutter heavily, completely unusable...

I am using v3.5.58 on my mac and still eating 100% of the CPU during few hours of using

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. :-/

image

i'm with the same problem on windows

Same issue

sameee issue

@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

same issue, this is on Ubuntu 22.04

NEX-S commented

same, maybe tabnine needs to use GPU instead of CPU.

on macbook pro 16 inch intel, macos version 12.6.1..it seems the same issue
use a lot of CPU and memory...

I use vscode...

does it fixed?

Still happening for me too.

Name Version
OSX 13.0.1 (22A400)
VSCode 1.73.1
Tabnine 3.6.31 (latest)

no .gitignore for my project which currently consists of a single main.py and one folder with nothing in it. There is no good reason for this to be happening with basically no load at all on it.

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

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

@zxqfl can this issue be reopened? People have been having the same issue for 4 years since this was closed.

same for me, it using cpu and memory as crazy, causing my m1 mac heating which I already forgot how is that (especially as it's not giving fan noise) it's become problem as eventually it just cause whole mac OS to crash, so yeah also disabling it, sad, helpful plugin
p.s. I hope it's not doing any mining

Having the same issue. Whenever I start vim, memory and cpu usage shoots through the roof, causing swapping and the system crawls to a halt. It usually provides it's completions just fine and without too much overhead, but sometimes it just goes crazy.