CPU 使用率非常高,而 RAM 使用率很低 - 是否可以将部分 CPU 使用率交换到 RAM(安装了 CloudLinux LVE 管理器)?

CPU 使用率非常高,而 RAM 使用率很低 - 是否可以将部分 CPU 使用率交换到 RAM(安装了 CloudLinux LVE 管理器)?

我必须安装 CloudLinux,这样才能在一定程度上控制 CPU 使用率,更重要的是控制网站使用的并发连接数。但正如您所见,服务器负载太高,这就是为什么有些网站需要长达 10 秒才能加载!

  • 服务器负载 22.46 (8 个 CPU) (!)
  • 内存使用量 36.32% (8,146,632 中的 2,959,188) (正常)
  • 已使用掉期 0.01% (2,104,504 中的 132) (正常)

服务器:

  • 8 个 Intel(R) Xeon(R) CPU E31230 @ 3.20GHz
  • 内存:8143680k/9437184k 可用(2621k 内核代码、234872k 保留、1403k 数据、244k 初始化)
  • Linux

昨天:总页面浏览量 214,514 (Awstat)

现在我的问题是:我可以将部分 CPU 使用率转移到 RAM 吗?

或者我还能做些什么来让网站运行得更快(网站是动态的 - 因此 SQL 很重)

谢谢

top - 06:10:14 up 29 days, 20:37,  1 user,  load average: 11.16, 13.19, 12.81
Tasks: 526 total,   1 running, 524 sleeping,   0 stopped,   1 zombie
Cpu(s): 42.9%us, 21.4%sy,  0.0%ni, 33.7%id,  1.9%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8146632k total,  7427632k used,   719000k free,   131020k buffers
Swap:  2104504k total,      132k used,  2104372k free,  4506644k cached

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND         
 318421 mysql     15   0 1315m 754m 4964 S 474.9  9.5  95300:17 mysqld          
   6928 root      10  -5     0    0    0 S  2.0  0.0  90:42.85 kondemand/3      
 476047 headus    17   0  172m  19m  10m S  1.7  0.2   0:00.05 php              
 476055 headus    18   0  172m  18m 9.9m S  1.7  0.2   0:00.05 php              
 476056 headus    15   0  172m  19m  10m S  1.7  0.2   0:00.05 php              
 476061 headus    18   0  172m  19m  10m S  1.7  0.2   0:00.05 php              
   6930 root      10  -5     0    0    0 S  1.3  0.0 161:48.12 kondemand/5      
   6931 root      10  -5     0    0    0 S  1.3  0.0 193:11.74 kondemand/6      
 476049 headus    17   0  172m  19m  10m S  1.3  0.2   0:00.04 php              
 476050 headus    15   0  172m  18m 9.9m S  1.3  0.2   0:00.04 php              
 476057 headus    17   0  172m  18m 9.9m S  1.3  0.2   0:00.04 php              
   6926 root      10  -5     0    0    0 S  1.0  0.0  90:13.88 kondemand/1      
   6932 root      10  -5     0    0    0 S  1.0  0.0 247:47.50 kondemand/7      
 476064 worldof   18   0  172m  19m  10m S  1.0  0.2   0:00.03 php              
   6927 root      10  -5     0    0    0 S  0.7  0.0  93:52.80 kondemand/2      
   6929 root      10  -5     0    0    0 S  0.3  0.0 161:54.38 kondemand/4      
   8459 root      15   0  103m 5576 1268 S  0.3  0.1  54:45.39 lvest

答案1

问题显然出在你正在运行的 Web 应用上。从输出来看,top你似乎正在运行一些 PHP 代码。你需要找出 PHP 代码的哪一部分导致了问题(直接导致或通过数据库访问导致)。

如果示例top输出描述的是通常的情况,我猜您的进程在应用程序级别互相阻塞(某种锁争用)。

我根据以下事实推断这一点:低 IO 等待时间(输出wa的数据top),33% 系统空闲高负荷。 这意味着你没有运行所有的 CPU,也没有等待 IO。在这种情况下,使系统“太慢”的唯一方法是使进程串行化(一个进程在 CPU#2 上等待,直到另一个进程在 CPU#1 上完成)。只有当不同进程之间存在或多或少显式锁定时,才会发生这种情况。如果您确实无法删除进程间锁定,那么唯一的选择就是投资更快的 CPU 内核,而不是多个慢速内核。您的 CPU 已经非常接近顶级,所以我会考虑先研究代码。

您问是否可以使用一些 RAM 来减少 CPU 使用率。使用积极缓存也许可以,但只有您正在运行的应用程序代码 (PHP) 才能利用这种权衡。同样,您需要分析和修改 PHP 代码。没有神奇的开关说请使用更多内存,更少 CPU。

答案2

我不知道你说的“将 CPU 使用率转移到 RAM”是什么意思,但不管你的意思是什么,它很可能不会起作用。

您需要找出导致应用程序速度变慢的实际瓶颈。这可能包括

  • I/O 带宽太低。系统正在等待硬盘
  • 数据库性能
  • 针对 Web 应用的未优化和/或计算密集型软件。
  • 与您的 Web 应用完全无关的其他内容。

答案3

您需要找出造成如此大负载的原因。您的服务器可能被一些 CPU 密集型任务加载,或者出现 IO 拥塞。

如果数据库 IO 负担过重,您可以尝试增加数据库缓存 - mysql 中的 innodb_buffer_pool 或 postgres 中的 shared_buffers。

编辑: 您的top输出显示您的问题出在未优化的 mysql 查询上。如果您可以管理数据库 - 找出缓慢的请求并创建适当的索引或重写 sql 查询以消除 mysql cpu 瓶颈。如果这不可能 - 购买更强大的 CPU。

相关内容