ubuntu Asp .NetCore-已达到对inotify示例数的配置用户限制(128)

ryoqjall  于 2023-04-05  发布在  .NET
关注(0)|答案(6)|浏览(201)

在对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代码块中引发,而不是在调用操作后立即引发。
非常感谢,如果有人有一些线索来解决这个问题。

qlckcl4x

qlckcl4x1#

到目前为止,我找到的最好的解决方案是通过运行以下命令来增加/etc/sysctl.conf中的fs.inotify.max_user_instances

echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

来源:https://github.com/dotnet/aspnetcore/issues/8449#issuecomment-512275929

ryhaxcpt

ryhaxcpt2#

对于容器化环境(在容器的生命周期内配置不会更改)或构建服务器,缓解此问题的方法是设置环境变量

DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE=false
这允许继续使用Host.CreateDefaultBuilder,并防止服务创建不必要的inotify instanced。

c0vxltue

c0vxltue3#

发生错误的原因是reloadOnChange导致访问appSetting.json文件时出现问题。
已达到对inotify示例数量的配置用户限制(128)
reloadOnChange设置为false

.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false);

注意:如果您还使用默认的WebHost.CreateDefaultBuilder,请注意在它内部reloadOnChange也被设置为true
所以可能只使用configure your host from scratch会更安全-这是一个如何做到这一点的例子(MicrosoftWebHost.CreateDefaultBuilder的副本,但没有FileWatcher依赖性和IISIntegration,因为你不需要IISUbuntu上)。

irtuqstp

irtuqstp4#

@dmitry-pavlov是错误的,你可以使用默认的构建器,因为最后添加的构建器会获胜-但是这样做会使 appsettings.json settings覆盖所有其他配置源,env和命令行。请参阅https://github.com/dotnet/AspNetCore.Docs/pull/22391,这将很快被正式记录。如果你不关心 appsettings.json 重新加载,请将其设置为false

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddJsonFile("appsettings.json",
                optional: true,
                reloadOnChange: false);
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
}
jgzswidk

jgzswidk5#

我只需要关闭一些visual studio代码窗口,特别是在visual studio代码编辑器中打开的文件。

hs1rzwqc

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。

相关问题