codota / TabNine

AI Code Completions
https://tabnine.com
MIT License
10.63k stars 498 forks source link

High memory and CPU usage #43

Closed dotdash closed 5 years ago

dotdash commented 5 years ago

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 5 years ago

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?

doron-cohen commented 5 years ago

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

ovidiucs commented 5 years ago

image

This is on archlinux.

taylorlapeyre commented 5 years ago

Using over 3GB of memory on my machine:

screen shot 2019-02-19 at 4 30 19 pm
tommoor commented 5 years ago

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

image

taylorlapeyre commented 5 years ago

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

n3bulous commented 5 years ago

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

Deewiant commented 5 years ago

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:

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 5 years ago

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 5 years ago

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:

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 5 years ago

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

superDuperCyberTechno commented 5 years ago

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

moritz commented 5 years ago

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?

QLaille commented 5 years ago

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.

doggyeh commented 5 years ago

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.

ilAYAli commented 5 years ago

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(!)

QLaille commented 5 years ago

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

QLaille commented 5 years ago

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

validatedev commented 5 years ago

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

CDitzel commented 5 years ago

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

shamoons commented 4 years ago

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

VinSpee commented 4 years ago

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

44GB memory

moritz commented 4 years ago

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

tmpm697 commented 4 years ago

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

Seybo commented 4 years ago

image

muke5hy commented 4 years ago

Uninstalling, it is taking 26+ GB of ram

Screenshot 2019-12-19 at 11 55 15 PM
adriancoliba commented 4 years ago

Has anyone found a solution yet?

Shougo commented 4 years ago

You can disable Tabnine local feature in Tabnine::config

salanhess commented 4 years ago

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

env: Centos7+vim+TabNine

sQVe commented 4 years ago

@salanhess Yes. Disable TabNine Local.

salanhess commented 4 years ago

git checkout c20d73f3e007d4b8804c344f114eb03b5c9466a3

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

Arstman commented 4 years ago

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 4 years ago

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?

drorweiss commented 4 years ago

@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 4 years ago

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!

drorweiss commented 4 years ago

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.

ghost commented 4 years ago

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.

buraksakalli commented 4 years ago

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

kahveciderin commented 4 years ago

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

Picoseconds commented 4 years ago

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!

dialguiba commented 4 years ago

image Same here :(

charlie0077 commented 4 years ago

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

mkubdev commented 4 years ago

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

ghost commented 4 years ago

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?

Picoseconds commented 4 years ago

AI uses a lot of memory.

solidstatejake commented 4 years ago

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.

RenanFG commented 4 years ago

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

mkhasson97 commented 3 years ago

Same problem!, Tabnine uses a lot of RAM

AkdenizKutayOcal commented 3 years ago

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.

dodderss commented 3 years ago

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