我有一个由 GoDaddy VPS 托管的 .NET 网站。
这是一台 Windows 2016 服务器,它还运行 SQL Express 实例,我正在使用 Plesk。
它还安装了 mysql,我认为 Plesk 会使用它。
最初我选择了 2GB RAM 服务器配置,但它崩溃了两次,我注意到 RAM 使用量从大约 1.5GB 开始,并持续上升到 2GB,然后服务器就会崩溃。
我之所以这么说,是因为我仍然可以访问 MS-SQL,仍然可以访问 RDP,但我的网站无法工作,Plesk 仪表板也会瘫痪。
所以我刚刚升级到 32GB RAM 服务器,因为网站上线了,而且我的客户正在付钱给我。
但自从几周前我升级以来,RAM 仍在慢慢增长。现在使用率约为 40%,大约 13GB RAM!
我正在运行 2 个基本的 IIS 网站。在任务管理器中,有 2 个 IIS 进程,每个进程使用 175MB 的 RAM。我还看到 SQL 和 DrWeb 分别使用了大约 450MB。有一个 DNS 服务和一个非消耗性服务管理器,使用了另外 350MB 的 RAM。除此之外,没有任何东西使用超过 10-40MB 的 RAM,如果我把所有进程加起来,我得到大约 2-3GB 的 RAM。
在任务管理器的性能选项卡上,显示已分配的缓存内存为 7.8GB。我不知道这是什么意思,但我认为这就是 RAM 的用途。
我不是服务器管理员,但我确实了解基础知识,并且检查了很多东西。
我还有其他使用 GoDaddy 共享主机的网站,这些网站非常相似(实际上是克隆),但没有一个网站存在这样的问题,所以我不认为这是我的网站的问题。
我个人认为这与 GoDaddy 的虚拟化软件或其他软件有关。从 2GB 服务器升级到 32GB 服务器需要 3 个小时。对我来说,这显然是发生了一些奇怪的事情的迹象。
无论原因是什么,我该如何找到导致 RAM 随时间增加的原因呢?
我读到过这是正常的,但是当它达到那么高时,我的网站就会崩溃,所以这不正常。
我已经运行了 perfmon 日志来保存工作内存,但我不知道如何分析该信息,因为它有数百行和许多不同的进程。
我确实看到服务器上有一些奇怪的活动,即它运行各种 python/powershell/conhost 脚本。它们似乎使用了大约 40MB 的 RAM,然后死机,然后启动了一个新的。但它们在任务管理器中仍然呈灰色,所以我不确定这是否值得研究。
我只是想知道发生了什么,但我对虚拟机和服务器了解不够,不知道如何诊断这个问题。
我会很感激任何帮助。我愿意付费寻求帮助,但我也不知道在哪里可以找到这种服务,如果有人知道可以提供帮助且价格不太贵的公司,那就太好了。
GoDaddy 的支持简直糟透了。我已经尝试过他们的付费诊断,我真的相信他们只是在那里坐了一个小时,然后说这是我的软件,我需要联系我的服务器管理员。
我读到页面文件大小应为 RAM 的 1.5 到 4 倍。我打算很快尝试一下。我必须等待我的客户批准,因为服务器处于活动状态,而客户端依赖于服务器。完成后会更新。
话虽如此,更改页面文件大小对我来说毫无作用。 RAM 仍然每 9 小时增加约 1%。非常令人沮丧。
更新:
在多次致电 GoDaddy 并得到解决我的问题的承诺后,但都没有任何进展,几周前我的服务器自行重启,此后近一个月内 RAM 一直保持稳定,然后突然间它又开始逐渐上升,就像我原来的问题一样。
我认为这与使用无关,因为使用情况一直很稳定。实际上,我认为问题不在于我的代码、程序、SQL 或任何我能控制的东西。我认为这与运行 GoDaddy VM 的软件及其所做的事情有关。
答案1
这听起来像是内存泄漏。首先,将 Process Explorer 2 之类的程序下载到 VPS 上,并在内存超高时搜索所有正在运行的进程,并查找使用最多的进程。它可能是一个系统进程,例如搜索索引。
如果是不是一个系统进程,对您的网站并不重要,尝试弄清楚它是什么(在此处评论),如果您可以禁用它,请这样做。
如果它是一个非关键系统进程(如搜索索引)并且您不需要它,请尝试禁用它并重新启动。
如果您确实需要它,或者它是一个关键的系统进程,那么最简单的方法是在服务器流量很少或没有流量的时候每天重启一到两次(通常需要 3-5 分钟)。向 GoDaddy 询问这个问题,并告诉他们:“我们可以每天在东部时间凌晨 12 点设置定时重启吗?”他们就会明白您的意思。
如果您有任何疑问,请在评论中告诉我,我会尽快回复。希望这能有所帮助!
答案2
为了进行比较,最好添加更新 3 和 4 中的更多后续屏幕截图。如果导致崩溃的原因是 Windows BSOD,还请在文件夹中发布转储C:\Windows\Minidump
(访问需要管理员权限)。
我对您所展示的图像的理解如下。
您的整个 RAM 尚未完全使用,并且 Windows 还不需要压缩任何内存。(请参阅内存压缩。
所有程序所占内存的总和还远远不够用到已使用的内存。
我的结论是内存泄漏不是发生在任何程序中,而是发生在 Windows 本身。这可能发生在 Microsoft 软件中,也可能发生在第三方驱动程序中。这一结论也得到了以下事实的支持:内存泄漏会导致崩溃,而用户程序只会被交换到磁盘并减慢速度,但不会使 Windows 崩溃。
由于这是一个生产系统,我能给出的建议非常有限。建议包括卸载所有安全软件或使用 干净启动 可能不适用。
您应该接受这种情况并尝试适应它。您可以创建一个计划任务来重新启动 Windows 并重新启动任何所需的软件,例如每周一次在深夜客户端不工作时重新启动。