我在 Centos 6 上用 Lighttpd 运行 Moodle,内存为 1G。如果我打开 10 个线程,Moodle 就会变得非常慢。
如何加快服务器速度?我需要为大量用户提供服务。
我使用 free 命令检查了内存,发现有很多可用内存。
编辑:我可以看到 php-cgi 的高 CPU 。
顶部:
# top -b -n 1 | head -30
top - 08:55:32 up 24 days, 21:37, 2 users, load average: 0.70, 0.24,
0.08
Tasks: 153 total, 2 running, 151 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.3%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si,
0.1%st
Mem: 1016480k total, 828692k used, 187788k free, 151316k buffers
Swap: 999992k total, 4036k used, 995956k free, 426880k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29247 lighttpd 20 0 477m 103m 61m R 92.1 10.4 1:37.25 php-cgi
23947 root 20 0 15020 1188 864 R 3.6 0.1 0:00.03 top
1 root 20 0 19228 1040 860 S 0.0 0.1 0:00.61 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:05.49 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:08.99 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 4:35.86 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenwatch
14 root 20 0 0 0 0 S 0.0 0.0 6:02.87 xenbus
15 root 20 0 0 0 0 S 0.0 0.0 0:21.59 sync_supers
16 root 20 0 0 0 0 S 0.0 0.0 0:18.66 bdi-default
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00
kintegrityd/0
18 root 20 0 0 0 0 S 0.0 0.0 0:13.23 kblockd/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ata/0
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ata_aux
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00
ksuspend_usbd
自由的:
# free -m
total used free shared buffers cached
Mem: 992 809 183 0 147 416
-/+ buffers/cache: 244 748
Swap: 976 3 972
猫/ proc / CPU信息:
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 4
model name : Quad-Core AMD Opteron(tm) Processor 2374 HE
stepping : 2
cpu MHz : 2200.130
cache size : 512 KB
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext
3dnow up rep_good unfair_spinlock pni cx16 popcnt hypervisor lahf_lm cmp_legacy extapic cr8_legacy abm sse4a misalignsse
3dnowprefetch
bogomips : 4400.26
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management:
答案1
虽然您的单个 php-cgi 线程很高,但系统负载并不高;您只占用了处理器的一个核心。您的机器似乎有足够的增长空间,您只需调整 Lighttpd 和 PHP-CGI 的配置即可获得所需的规模。
最初的问题是,您将所有请求发送到单个 php-cgi 线程。因此,您正在利用盒子的其他 3 个核心。我建议不要使用 php-cgi,而是运行 PHP-FPM,它将监听单个套接字或端口;并将请求负载平衡到您定义的工作线程数。如果此盒子还执行 MySQL 或其他任务,您可能只想将其扩展以留出一个核心用于其他处理需求。
另一件要考虑的事情是你实际测试的是什么。当你说 10 个线程时 - 你实际上在说什么。当我在这里说 10 个线程时,我会假设你有 10 个进程,它们会尽可能多地调用服务器(JMeter)这可能导致 10 个请求/秒,也可能导致 50 个请求/秒。另一个问题是,每个线程是否也加载 html 请求中的所有资源,或者只是 HTML。
Google 上有很多关于配置 PHP-FPM 和 Lighttpd 的教程,下面是我从 Google 搜索顶部找到的一个快速教程 -http://www.howtoforge.com/installing-lighttpd-with-php5-php-fpm-and-mysql-support-on-ubuntu-12.04
根据我所看到的情况;一旦将 Lighttpd 和 PHP 配置为使用所有核心,您应该能够实现 3-4 倍的连接数。
答案2
php-cgi 的 CPU 使用率实际上相当高。服务器运行缓慢通常与两个因素有关:CPU 或 I/O。
I/O(如果是障碍)可通过 %wa(等待)指示器看到,可能是由于内存不足和交换(将内存放在磁盘上,然后减慢一切速度)引起的。对于稳定性不是绝对关键的 Web 服务器来说,这通常是一个好主意(正如这种情况通常使用网页:如果它不起作用,只需刷新)使用以下命令(以 root 身份)完全删除交换
swapoff -a
如果您的 CPU 使用率很高和它来自 PHP,但 %wa 很低,那么您肯定会遇到与 PHP 代码执行相关的性能问题(例如,通过反对 SQL 查询)。避免这种情况的最佳方法是尝试使用操作码缓存(如 APC 或 PHP 5.5 附带的 Zend 操作码缓存)。操作码缓存实际上使用了少量内存,但避免了大量计算(它将 PHP 脚本的预编译版本放在内存中,因此加载它们两次 - 或十次 - 只会“计算”它们一次)。
话虽如此,如果您考虑在低 CPU、低内存的“服务器”上运行 Moodle,那么它并不是最好的 LMS。