内存达到88%时服务器崩溃

时间:2018-02-18 09:04:03

标签: server monitoring digital-ocean pm2 angular-universal

我在8 GB内存/ 80 GB磁盘/ Ubuntu 16.04.3 x64 / 4 vCPU的Digital Ocean小滴中使用Angular universal和PM2作为进程管理器进行服务器端渲染。

我使用6GB交换文件,以及“free -m”如下所示的可用内存:

          total    used        free      shared  buff/cache   available
Mem:       7983    1356        5290          16        1335        6278
Swap:      6143      88        6055

ram used看起来不错。 PM2的集群模式有4个进程。

每隔6-8小时,当我的Digital Ocean面板内存达到~88%时,CPU会变得非常高,Web应用程序没有正确响应,PM2必须重新启动过程,不知道网络有多长应用程序不能很好地工作。

以下是发生的事情的图像:

CPU and Memory of the server

正常工作时表现良好:

Web application performance

我认为我缺少某种配置或类似的东西,因为这种情况总是在同一时期发生。

EDIT1 到目前为止,我修复了代码中的一些不兼容问题(应用程序正在运行,但有时因此而失败),并添加了1GB的memory limit in pm2。我不确定这是否可行,因为我对进程管理有点新意,但CPU级别现在还不错。任何评论表示赞赏。我留下了当前行为的图片,每当四个进程中的一个达到1GB时,它重新启动:

enter image description here

EDIT2 我再添加3张图片,其中2张显示来自Digital Ocean的热门流程,另一张显示Keymetrics状态:

Memory top processes CPU top processes Keymetrics processes

EDIT3 我从我的Angular应用程序中找出了一些内存泄漏(我忘了取消订阅几个订阅)并且系统行为有所改善,但内存行仍然在增加。我将继续调查Angular中的内存泄漏,看看我是否犯了其他错误:

Memory RAM edit3

1 个答案:

答案 0 :(得分:0)

在我们的(边缘)案例中,kubernetes 健康检查是问题的原因。健康检查通过内部 IP 访问主页。该页面使用调用者 URL(在本例中是它的 IP)来加载一些它无法通过这种方式找到的资源。这会导致错误并以某种方式缓存并慢慢耗尽所有内存。由于健康检查的规律性,我们即使在夜间也有同样非常线性的内存增长。

我们通过让健康检查调用“/health”来解决这个问题,我们只返回一个 200 代码..无论如何都应该这样做。