Azure 应用服务 - 无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满



我正在运行一个 Azure 应用服务实例,大约一天左右后,可能有 15-30 人使用该站点,没有人可以再访问 MySQL 数据库,他们只是在发起请求时收到此错误:

"无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满">

我有很多实例可以很好地与 MSSQL 配合使用(我所有其他应用服务都有 SSL),但这是我的第一个出现此错误的应用服务(恰好是一个 MySQL 数据库)。这个有问题的特定实例目前也没有SSL,但我不确定这是否与该问题有关。

我已尝试模仿工作应用服务中的所有设置,但仍然不起作用。我不确定如何确切地诊断问题。我所有的数据库调用都被关闭了,我正在处理连接,而且它们都使用"using"语句,但我仍然收到此错误。任何指导将不胜感激。谢谢。

An operation on a socket could not be performed 
because the system lacked sufficient buffer space or 
because a queue was full
  • 上述错误通常不是因为MySQL,而是因为MySQL正在运行的操作系统。

  • 这有两个操作系统级别的原因,第一个与内存分配有关,另一个与TCP端口分配有关。

  • 将遇到上述错误是MySQL程序获得的内存(RAM)比操作系统本身多,以至于操作系统无法正常运行,并且您将收到错误。

  • 第二个原因是使用的端口高于允许的TCP"临时"端口。对于窗口,限制设置为 5000。由于您使用的是 MYSQL 和 MYSQL 默认 TCP 端口是3306。这可能不是原因。

  • 现在,为了解决与内存相关的问题,我们必须编辑boot.ini文件,我们必须在其中删除/3gb开关,因为它会阻止应用程序访问额外的内存并为操作系统提供更多内存。

  • 要编辑boot.ini,我们可以通过Bootcfg进行编辑的命令行工具boot.ini另一种编辑引导的方式.ini最好是通过文本编辑器记事本。您可以通过运行以下命令.ini打开引导。

notepad.exe Boot.ini

请参阅此 MSDOC 有关编辑Boot.ini

你也可以参考Dan Benediktson关于同一问题的Artilcle。

最新更新