VPS 提供商限制数据处理 Spring Boot 应用程序的 CPU 使用率的问题

VPS 提供商限制数据处理 Spring Boot 应用程序的 CPU 使用率的问题

我开发了一个带有 PostgreSQL 数据库的 Java Spring Boot 应用程序。由于要处理的数据相当多,因此处理可能需要一些时间,并且会占用大量 CPU(例如显然高达 100%)。当 CPU 长时间超出时,我的 VPS 提供商会自动锁定服务器。

我尝试了各种解决方案,例如nice使用最低优先级来启动 Java 应用程序或cpulimitpostgres实例或java实例上,但使用cpulimit似乎会导致应用程序本身出现问题,要么 Java 无法启动,要么 PostgreSQL 无法完成处理工作负载。nice然而似乎并不能防止“过度”的 CPU 使用率,因此服务器仍然被关闭/锁定。

我不确定是否需要进一步优化应用程序(但我已经这样做了),以及如何避免超出 CPU 使用率而不导致数据处理问题。

该服务器似乎有 2 GB RAM 和 1 个核心。

答案1

应用程序无法启动,数据库查询无法完成,这些都是影响工作完成的严重问题。如果这些问题可以归因于 CPU 配额,则您面临容量规划挑战。

了解您的提供商声称此主机拥有哪些资源,以及该技术是虚拟机还是容器。他们很可能超额订购 CPU,因此您的合法工作负载爆发到大部分 CPU 可能会给他们带来问题。还要询问提供商,发生这种锁定事件是否是由于共享 CPU 短缺,还是他们施加了某种惩罚。

nice、cpulimit、系统资源控制,如果应用程序有时需要超过可用的 CPU 时间才能达到可接受的性能,那么这些优先级和配额系统都无法拯救你。

转移到另一个托管提供商,以避免共享 CPU 不足,并总体评估您的选择。调整 CPU 和内存,直到其性能足够好。即使在启动或任何批处理等突发使用期间也是如此。尝试一台具有 2 个 CPU 的主机,尝试将数据库和应用程序分离到不同的 1 CPU 主机上。

由于这是一个 systemd Linux 发行版,请启用每个单位的资源核算man systemd.resource-control。考虑收集详细的主机指标,例如网络数据. 改进您的分析,使其超出 CPU 100% 的范围。其中应用程序、数据库和其他开销的比例是多少?Linux 压力停滞信息是否表明 CPU 确实停滞了?

性能还存在其他限制因素。例如,对于应用程序及其数据库来说,2 GB 内存不算多,但对于较小的应用程序及其数据库来说,可能就够了。查看主机指标以查找内存压力,尤其是在应用程序运行缓慢时。

答案2

当然,解决方案是转向在 CPU 占用高时不会锁定服务器的提供商。但是,如果您发现不应超过的时间段,则可以将数据拆分为块,以便每次处理时都不会超过该时间段。

相关内容