我们有一个大规模的nodejs项目(约100万名以上的用户),突然间我们的CPU遭受了巨大的打击。 (Epyc 24c 2ghz)
我们一直在尝试使用探查器调试所有CPU的使用情况(我可以在下面向您展示输出),无论它是什么,它的表现都非常奇怪。
我们有一个主进程,在它们全部加载后会生成48个集群,而CPU的使用率会慢慢增长到最大值。杀死集群后,LA完全不会掉线。但是,在终止主进程后,一切都会恢复正常。
主进程显然不会最大化所有线程,杀死集群真的可以解决问题吗?
我们甚至完全停止了应用程序和集群的用户输入,并且根本没有减少cpu的使用。
如果您需要的话,我们可以发送大量日志文件。
答案 0 :(得分:0)
根据配置文件,代码似乎花费大量时间从系统获取当前时间。围绕一堆经常使用且相对较快的操作,您是否有try {
$zipex=Microsoft.PowerShell.Archive\Expand-Archive -LiteralPath "C:\aaaa\bbbbb" -DestinationPath "D:\var\log" -Force -ErrorAction Stop
}
catch [System.Management.Automation.PSArgumentException] {
Write-Verbose "Path $($_.TargetObject) not found!" -Verbose
}
(或老式的效率低下的Date.now()
)电话?尝试删除它们,您应该会看到加速(或分别降低CPU利用率)。
关于停止用户输入而不减少CPU负载:您是否可能安排回调?或诺言,或其他异步请求?编写只需要启动然后让CPU永远保持忙碌状态的程序并不难。
除了这些粗略的猜测之外,这里没有足够的信息来深入研究。除了与时间相关的资料外,还有其他内容吗?特别是您自己的代码?自下而上的个人资料怎么说?