我有一个带有 api 的 rails 应用程序,它每天接收大约 600k 到 ~ 1000k 的请求。这些请求主要针对文件列表和获取端点。
文件列表端点获取包含来自 elasticsearch 的文件信息的 2000 条记录的列表,每条记录都有一个 id,然后用于通过 api 获取文件,使用 send_file(使用 Nginx 的默认 X-SendFile 标头)和 send_data (如果文件被压缩,则在运行时未压缩并读出)。
这一切都托管在一个管理程序 lxd 设置上,虽然我们有 32GB 的内存,但我们遇到了内存填满的问题,我们将它增加到 48GB,但也逐渐填满了。
我们最初认为 502 和读取超时是因为内存已满。我们进行了一些分析,发现读取文件消耗了内存,并且似乎 lxd 容器没有释放内存存在问题,我们通过一个每 30 分钟释放一次内存的脚本修复了它。
现在内存稳定了,我们仍然会随机获得一些读数和 502,以及 SSL_Connect 问题,在我们获得 502 后开始(随机)出现,如果我们重新启动应用程序就会停止。
我们为 postgres db 使用默认的 puma 配置和 5 个池连接。
任何关于优化和调试的想法都会有所帮助。
谢谢。