我正在运行一个 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。