在对mysql数据库(Ubuntu 14.04/16.04上)查询一定次数后,asp.net core MVC报告错误,消息如下:“inotify示例数已达到配置的用户限制(128)。”可以确定是由于控制器打开的文件太多,超出了iNotify设置的限制(在**/proc/sys/fs/inotify/max_user_instances**中),但我只是奇怪ASP.NET在每个http请求上打开文件,为什么不打开无法正确关闭文件?是否有人也遇到此问题?备注:我使用的是MySQL.data.core和MySQL.data.entityframeworkcore提供程序。
private static string classiferstring = "sports,outdoor,startup,pets,child,adult,elderly";
[AllowAnonymous]
[HttpGet]
public async Task<object> Classify([FromQuery] string classifyword)
{
string[] classifers = classiferstring.Split(',');
if (!classifers.Contains(classifyword))
{
return new
{
status = 0,
info = "WrongClassifier",
Data = ""
};
}
try
{
var predata = await (from d in _context.descriptor
join a in _context.combination on d.ID equals a.ID
select new ProductsVM
{
CREATETIME = a.CREATETIME,
ID = a.ID,
COMPANY = a.COMPANY,
NAME = a.NAME,
PRICE = a.PRICE,
TYPE = a.TYPE,
HEADPHOTO = a.HEADPHOTO,
REMARK = a.REMARK,
Tags = d.Tags,
Classifier = d.Classifier,
OriginName = d.OriginName,
Briefing = d.Briefing
}).ToListAsync();
var data = (from x in predata
where x.Classifier.Contains(classifyword.ToLower())
select x).ToList();
if(predata.Count<=0)
{
return new
{
status = 2,
info = "NoResult",
Data = ""
};
}else
{
return new
{
status = 1,
info = "Success",
Data = data
};
};
}
catch(Exception e)
{
return new
{
status = 0,
info = "Error",
Data = e.Message
};
}
}
请注意,异常仅在try/catch代码块中引发,而不是在调用操作后立即引发。
非常感谢,如果有人有一些线索来解决这个问题。
6条答案
按热度按时间qlckcl4x1#
到目前为止,我找到的最好的解决方案是通过运行以下命令来增加
/etc/sysctl.conf
中的fs.inotify.max_user_instances
:来源:https://github.com/dotnet/aspnetcore/issues/8449#issuecomment-512275929
ryhaxcpt2#
对于容器化环境(在容器的生命周期内配置不会更改)或构建服务器,缓解此问题的方法是设置环境变量
DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE=false
这允许继续使用
Host.CreateDefaultBuilder
,并防止服务创建不必要的inotify instanced。c0vxltue3#
发生错误的原因是
reloadOnChange
导致访问appSetting.json
文件时出现问题。已达到对inotify示例数量的配置用户限制(128)
将
reloadOnChange
设置为false
:注意:如果您还使用默认的
WebHost.CreateDefaultBuilder
,请注意在它内部reloadOnChange
也被设置为true
。所以可能只使用configure your host from scratch会更安全-这是一个如何做到这一点的例子(
Microsoft
WebHost.CreateDefaultBuilder
的副本,但没有FileWatcher
依赖性和IISIntegration
,因为你不需要IIS
在Ubuntu
上)。irtuqstp4#
@dmitry-pavlov是错误的,你可以使用默认的构建器,因为最后添加的构建器会获胜-但是这样做会使 appsettings.json settings覆盖所有其他配置源,env和命令行。请参阅https://github.com/dotnet/AspNetCore.Docs/pull/22391,这将很快被正式记录。如果你不关心 appsettings.json 重新加载,请将其设置为
false
jgzswidk5#
我只需要关闭一些visual studio代码窗口,特别是在visual studio代码编辑器中打开的文件。
hs1rzwqc6#
我最近在www.example.com 5.0上看到了这个问题dot.net。在我的情况下,它是由使用这里找到的bundle标记助手引起的:https://github.com/meziantou/Meziantou.AspNetCore.BundleTagHelpers。似乎使用asp-append-version的标记帮助程序已被认为会导致此问题,请参阅此处https://github.com/dotnet/runtime/issues/27272#issuecomment-525007303。