具有 10 个线程的 moodle 在 lighttpd 上速度很慢

具有 10 个线程的 moodle 在 lighttpd 上速度很慢

我在 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。

相关内容