我刚开始使用VSCode版本1.24.1。
加载文件夹后,会显示警告
Visual Studio Code无法在此大型工作区中查看文件更改
按照guide的建议检查限制后,使用
cat /proc/sys/fs/inotify/max_user_watches
我得到8192,而我的项目只有650个文件(其中400个在.git内)
为什么会这样?这是一个错误还是我错过了什么?
(增加限制显然不是正确的解决方案。)
答案 0 :(得分:8)
您不在场的事实并不意味着其VSCode
的错。
VSCode
确实存在从watch(在Linux上)中排除目录的问题。
但是,由于您自己计算了文件数量,因此在这种情况下,错误消息可能会引起误解,并且其他一些应用程序已经用尽了手表。
要跟踪有罪的应用程序,可以使用this nice script
答案 1 :(得分:2)
我找到的对我有用的解决方案是
将此行fs.inotify.max_user_watches=524288
添加到/etc/sysctl.conf
然后运行命令sudo sysctl -p
然后转到您的vscode设置,找到名为settings.json
的文件
和这行
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/*/**": true
}
答案 2 :(得分:2)
答案 3 :(得分:2)
以下对我有用的设置(在.vscode/settings.json
中,您也可以将它们置于vscode中的用户级别/系统级别设置,而不是工作空间级别设置)
"files.watcherExclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/node_modules": true,
"**/some-soft-link-to-higher-level-directory-in-my-file-system" : true,
"**/.cache-loader" : true
}
默认情况下,可能会排除 .git, node_modules
,但是根据您的工作空间,您可能需要添加其他内容。例如,我有一个软链接到文件系统中的一个更高级别的目录(递归地有数十万个文件)。同样,.cache-loader
通常具有数千个文件。
可能有用的注释:我花了一些时间才意识到files.exclude
和files.watcherExclude
是两个不同的设置。
一些理论观点:此处的大多数答案(甚至在正式的vscode文档中)都建议将系统监视程序的限制增加到非常大的数目。在大多数情况下,这可以正常工作,但是,就像用锤子代替螺丝起子一样(蛮力,可能并不总是有效,并且效率不高)。尽管可以(可能应该)从默认限制中提高绝对系统限制,但是优化工作空间并避免使用不必要的系统资源是有益的。
答案 4 :(得分:1)
好像是内存泄漏。
现在似乎警告已经消失了。
不幸的是我现在无法重现这个错误,但这里有一些步骤。
git init
此时我在htop
中看到有一个进程/usr/share/code
,其中包含TypeScript
使用100%1 CPU和1G RAM的长参数。然后
现在警告不再显示,CPU也正常使用。
答案 5 :(得分:1)
答案 6 :(得分:1)
如 issue 40898 中所述,该问题对于多根工作区仍然存在
<块引用>最初的问题是,当 vscode 运行时,npm install 需要两倍的时间来安装依赖项。
我发现这是因为文件监视 node_modules 文件夹,所以我将它添加到 files.watcherExclude
。
我使用以下组合(但它们似乎都不起作用):
"files.watcherExclude": {
"**/node_modules": true,
"**/node_modules/**": true,
"**/node_modules/*/**": true
}
此 comment 指出 a script 中的 Dirk Feytons 以查看实际创建了哪些 inotify 监视,以确认是否正在使用我的观察者排除项。
/*
* If you want to see which inotify watches are being created by an application then you can
* use this simple piece of code, compile it to a shared library and LD_PRELOAD it when starting
* the application. Keep an eye on syslog to see the list of watches.
* **NOTE**: this only logs the watches, it won't actually create the watch and thus watching
* for changes WON'T actually WORK!
*
* More details (adjust as needed for your environment/distribution):
* - Save this file in e.g. $HOME/inotify.c
* - Compile: gcc -shared -o inotify.so inotify.c
* - Start monitoring syslog: tail -f -n 0 /var/log/syslog | tee $HOME/watches.log
* - Run your application with: LD_PRELOAD=$HOME/inotify.so <application>
*/
#include <sys/inotify.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
int inotify_add_watch(int fd, const char *pathname, uint32_t mask)
{
syslog(LOG_USER | LOG_ERR, "********** [%u] inotify_add_watch for %s", getpid(), pathname);
return 100000;
}
答案 7 :(得分:0)
这是解决方法:https://code.visualstudio.com/docs/setup/linux
可以通过编辑/etc/sysctl.conf并将此行添加到文件末尾来将限制增加到最大:
fs.inotify.max_user_watches = 524288 然后可以通过运行sudo sysctl -p
来加载新值。答案 8 :(得分:0)
就我而言,我没有足够的特权来更改sysctl.conf
,因此我针对Ubuntu 18.04 LTS的解决方案是:
sudo /bin/su -c "echo 'fs.inotify.max_user_watches=524288' >> /etc/sysctl.conf"
sudo sysctl -p
答案 9 :(得分:0)
Linux ppl不知道什么,像我这样对Linux有新的ppl。因此,如果您是菜鸟,这是给您的。
cat /proc/sys/fs/inotify/max_user_watches
(可能是8k以上的数字)sudo vim /etc/sysctl.conf
一直往下走,并添加以下行:fs.inotify.max_user_watches=524288
(确保不要在命令前加上#
)
键入:wq!
并输入
sudo sysctl -p
cat /proc/sys/fs/inotify/max_user_watches
(现在应该超过500k)答案 10 :(得分:0)
帮助我为正在从事的项目创建一个单独的工作区的是什么。因此,如果我正在/ htdocs / project /中进行操作,则不只是打开该文件夹,而是将其创建为工作区。
答案 11 :(得分:0)
如果您正在编写 JavaScript ,则可能可以解决此问题:
您必须访问侧边栏扩展菜单: Ctrl + Shift + X 。
然后输入:@builtin types
并禁用扩展名:TypeScript and JavaScript language features
。