我有一个非常奇怪的情况,我很难解决。 一个性能问题看起来真的很像在代码中设置的一个空的等待序列(虽然它可能不是这样)。
我有一个非常强大的专用服务器(10 GB内存,八个至强核心等)运行的Ubuntu 10.04与所有的function服务(除用于提供安全访问客户端的OpenVPN服务器)部署在单独的VirtualBox(vboxheadless)机器对于公司电子邮件服务器,一个用于Web服务器,另一个用于accounting / crm服务器(Firebird +专用应用服务器,与Delphi制造的客户端一起工作))。
CPU负载(“顶”说)几乎总是接近零。 主机系统RAM接近100%的使用率,但不会超负荷(因为使用很less的交换,并释放(通过停止其中一个虚拟机)内存不会很快重用)。 大约50%的客人RAM被使用。 iostat通常显示接近零%util。 networking带宽似乎没有得到充分利用。
但是,会计/ CRM客户端(在WinXP机器上运行的Win32 Delphi应用程序)软件工作很慢,使用这台服务器(使用内部局域网Windows服务器工作得更好)。
我无法想象如果在客户端和服务器上有足够多的CPU,RAM,硬盘和带宽资源,即使在最困难的时刻,也可能会让速度变慢。
说带宽不足,我不仅知道客户端和服务器连接到互联网的渠道比真正使用的渠道更多(这样就有可能在他们之间的路线上出现瓶颈),我testing过在客户端和服务器之间通过复制文件之间的带宽。
我将猜测,Delphi会计应用程序正在使用SMB连接到服务器。 某些types的应用程序使用基于文件的数据库:Access,Outlook PST,FoxPro,BTrieve等。 当客户端和服务器被广域网链路隔开时,这些通常performance非常糟糕 – 即使它是一个快速的广域网链路,等待时间也会消失。 这与使用ODBC和SQL驱动程序进行后端连接的应用程序相反; 那些可以更好地处理一些延迟。
当服务器在局域网上时,你说这个工作正常,这个事实确实指出了这个问题。 所以,没有“修复”。