Vmware Esxi - 旧版 32 位软件在多核上的性能问题

Vmware Esxi - 旧版 32 位软件在多核上的性能问题

我已经疯狂了两天了,我正在寻求帮助。

我有一个用 delphi 开发的程序(大约 2000 年代初期),可以访问 firebird v3 数据库,当前安装在同一台机器上(windows server 2016 x64 - db 和程序是 x86)。

该机器是在 vmware esxi 上配置的 VM,我来谈谈要点:如果我仅使用 1 个 vCPU 配置 VM,则程序运行得很好,如果我还使用 2 个 vCPU(1 个插槽和 2 个核心)或更多配置它,性能就会减半。

问题是,只留下一个 vCPU,即使只是对于 Windows 服务器作业(例如搜索更新和其他内容),CPU 也会永远保持 100%。

你有什么建议吗?

PS:我无法切换到firebird x64,因为许多库都是x86。

PPS:虚拟机上的操作系统是 Windows Server 2016 Standard ed

答案1

让客户机使用一个 CPU。并在清单中记录有关此客户机的一些注释中的原因。

更多地关注满足应用程序性能指标,而不是像 CPU 利用率这样误导性的基本指标。交互式应用程序是否响应迅速?批量查询是否在可接受的时间内完成?如果是,就不要担心 CPU。

编辑:“锁定”级别的性能不佳不在您的原始问题中,这是重要的背景。解决这个问题可能值得付出一些额外的努力:

  • 安排数据库关闭的维护时间,以应用更新和其他任务。
  • 增加 CPU,并应用其他评论提到的应用程序级 CPUAffinity 配置,将其锁定为一个。

答案2

如果您将进程关联性固定到单个核心,则另一个核心将保持空闲,供其他进程使用。根据实际的调度问题,可能需要将 Firebird 服务器固定到同一个核心或其他核心。

但是,由于 ESXi 也会虚拟化 CPU 核心,因此它会继续在物理核心之间移动 vCPU 核心。您可能还需要修复虚拟机与特定核心的亲和性。

您应该意识到,这种调整是由代码错误或软件严重过时造成的。您应该认真考虑更新代码。

答案3

这是 FireBird 的一个已知问题。

我确实管理过一些使用 FireBird 来运行各种软件的客户,而且多线程状态很难用 .conf 来配置,但首先您必须安装 Firebird 并且按照多 CPU 使用所需的设置进行设置,即经典服务器。

在此处输入图片描述

如果您想确定的话,请不要忘记客户端应用程序也需要多线程安全库。

线程安全客户端库

Thread-safe Client Library

Dmitry Yemanov
Vladyslav Khorsun
Alex Peshkov

Tracker reference CORE-707.

The client libraries, including the embedded one, can now be used in multi-threaded applications without any application-level

同步。

相关内容