我读了很多关于优化服务器的网站,但没有什么能真正帮助我 :( 我认为我遇到了内存问题,我只有一个网站(Drupal),每月有 860K 的页面浏览量,但当流量增加时,平均负载上升超过 +40、+70 等,内存使用率为 100%,导致服务器完全瘫痪
实际上,当我刚刚重新启动服务器时,总内存使用量约为 80%
我不知道该怎么办!我真的不敢相信这个服务器无法处理这种流量,请帮帮我!
眼镜
Processor #1 to #24
Intel Dual Xeon E5645 @ 2.40GHz
Cache 12288 KB
4GB Total RAM
Apache/2.2.19 -prefork- (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 PHP/5.2.17
500GB HD RAID 1
Drupal based website with Boost module and Cache Router (INNODB tables)
APC Installed
顶部 (shift - m)
top - 23:05:37 up 19:42, 1 user, load average: 0.78, 0.74, 0.64
Tasks: 527 total, 1 running, 524 sleeping, 0 stopped, 2 zombie
Cpu(s): 1.7%us, 0.3%sy, 0.0%ni, 97.9%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4034276k total, 3774668k used, 259608k free, 279060k buffers
Swap: 6088624k total, 103616k used, 5985008k free, 1316080k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8768 mysql 15 0 1211m 880m 4784 S 12.0 22.4 20:43.44 mysqld
20475 nobody 16 0 429m 176m 27m S 0.0 4.5 0:00.44 httpd
20846 nobody 15 0 427m 176m 28m S 1.0 4.5 0:01.13 httpd
20775 nobody 15 0 422m 171m 29m S 0.0 4.4 0:01.22 httpd
20826 nobody 15 0 422m 171m 29m S 0.7 4.4 0:01.00 httpd
20827 nobody 15 0 423m 171m 28m S 0.7 4.4 0:00.61 httpd
20578 nobody 15 0 422m 171m 29m S 0.0 4.3 0:01.73 httpd
20833 nobody 15 0 422m 170m 28m S 0.0 4.3 0:00.84 httpd
20830 nobody 15 0 421m 170m 28m S 0.0 4.3 0:00.84 httpd
20681 nobody 15 0 422m 170m 28m S 1.0 4.3 0:00.93 httpd
20913 nobody 15 0 422m 170m 27m S 0.0 4.3 0:00.34 httpd
20914 nobody 15 0 422m 169m 27m S 0.0 4.3 0:00.60 httpd
20854 nobody 15 0 423m 167m 23m S 0.0 4.2 0:00.36 httpd
20911 nobody 16 0 418m 167m 28m S 0.3 4.2 0:00.70 httpd
httpd配置文件
Timeout 300
TraceEnable On
ServerSignature Off
ServerTokens Full
FileETag All
StartServers 5
<IfModule prefork.c>
MinSpareServers 5
MaxSpareServers 10
</IfModule>
ServerLimit 256
MaxClients 150
MaxRequestsPerChild 800
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100
我的cnf
[mysqld]
max_connections = 120
safe-show-database
skip-locking
key_buffer = 148M
max_allowed_packet = 14M
table_cache = 596
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache_size = 24
query_cache_size= 128M
thread_concurrency = 48
wait_timeout = 45
innodb_file_per_table
innodb_log_file_size = 10485760
open_files_limit = 8192
tmp_table_size=200M
max_heap_table_size=200M
innodb_buffer_pool_size=596M
local-infile=1
log_slow_queries = /var/log/slow.log
long_query_time = 3
[mysqldump]
quick
max_allowed_packet = 16M
[mysqld_safe]
log-error=/var/log/mysqld.log
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 128M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 128M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M
一些图表(本周)
- 平均负载/文件系统使用情况(注意交换磁盘)/ MySQL 统计信息
- https://i.stack.imgur.com/rIyAn.gif
更新:
- 已安装 Apache 模块
- /etc/init.d/httpd -M 并得到这些结果 dpaste.com/hold/615665
- /etc/init.d/httpd -l 结果 dpaste.com/hold/615667
- PHP配置文件 http://dl.dropbox.com/u/33784/info.html
服务器负载超过 200
top - 12:27:13 up 5 days, 9:04, 1 user, load average: 219.36, 189.93, 130.56
Tasks: 750 total, 1 running, 749 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.3%us, 1.0%sy, 0.1%ni, 49.7%id, 47.8%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 4034276k total, 4014052k used, 20224k free, 13404k buffers
Swap: 6088624k total, 3036872k used, 3051752k free, 71272k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15653 mysql 15 0 1444m 154m 3384 S 0.0 3.9 192:42.76 mysqld
23800 nobody 16 0 422m 96m 29m D 0.3 2.4 0:06.96 httpd
23527 nobody 16 0 422m 93m 29m D 0.0 2.4 0:05.11 httpd
23759 nobody 15 0 421m 91m 26m S 0.7 2.3 0:03.97 httpd
23842 nobody 16 0 422m 91m 26m D 0.3 2.3 0:04.88 httpd
23819 nobody 16 0 421m 91m 26m D 0.3 2.3 0:07.11 httpd
23739 nobody 16 0 421m 91m 26m D 0.0 2.3 0:10.27 httpd
23778 nobody 15 0 421m 91m 26m S 0.0 2.3 0:04.81 httpd
23790 nobody 15 0 421m 91m 26m S 0.0 2.3 0:03.86 httpd
23754 nobody 16 0 421m 91m 26m D 0.0 2.3 0:08.19 httpd
23700 nobody 16 0 421m 90m 26m D 0.3 2.3 0:05.45 httpd
23843 nobody 16 0 420m 90m 26m S 0.0 2.3 0:06.39 httpd
23510 nobody 16 0 426m 90m 24m D 0.0 2.3 0:04.98 httpd
23841 nobody 16 0 416m 89m 29m D 0.0 2.3 0:03.53 httpd
23836 nobody 15 0 414m 89m 30m S 0.0 2.3 0:05.82 httpd
23849 nobody 15 0 418m 88m 25m S 0.0 2.3 0:05.78 httpd
23833 nobody 16 0 429m 88m 24m D 0.0 2.3 0:05.59 httpd
23832 nobody 16 0 418m 88m 25m S 0.0 2.2 0:09.25 httpd
23746 nobody 16 0 428m 88m 25m D 0.0 2.2 0:04.13 httpd
23851 nobody 16 0 428m 88m 24m D 0.0 2.2 0:03.60 httpd
23816 nobody 15 0 418m 88m 25m S 0.0 2.2 0:07.00 httpd
23282 nobody 15 0 416m 87m 28m S 0.0 2.2 0:11.29 httpd
23742 nobody 15 0 416m 86m 26m S 0.0 2.2 0:09.37 httpd
23837 nobody 16 0 425m 86m 25m D 0.3 2.2 0:05.20 httpd
23093 nobody 16 0 430m 86m 24m D 0.0 2.2 0:04.19 httpd
23732 nobody 16 0 421m 86m 24m D 0.0 2.2 0:05.55 httpd
23772 nobody 15 0 415m 85m 29m S 1.0 2.2 0:14.55 httpd
有人帮助我调整了 Apache 设置,但一切看起来都一样
我已启用管道日志记录,这应该有助于解决内存问题。我还缩短了 Apache 进程在内存循环之前执行的请求数量。
我将非常感谢您的帮助,我几乎尝试了所有方法,我并不是真正的系统管理员,但我们现在没有人可以帮助我们。
谢谢你!
答案1
一般经验法则 -
当服务器负载不足时运行此命令:
ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
这将告诉您 Apache 进程的大致平均大小。
这不是一个专用的 Web 节点,因此 60% 的 RAM 可用于 Apache。
4096 * .60 / AVERAGE_SIZE_HTTPD_PROCESS = 大约是您可以服务的 MaxClients/requests 数量。一般来说,您的平均值约为 170MB,因此...
您一次可以处理 14 个请求。将 MaxClients 减少到更合理的数字,例如 20-25。
干杯
答案2
猜猜是什么??
mod_security 模块是导致内存问题的原因,我禁用了它,每个 httpd 进程的内存从 180mb 降到了 35mb!
它从一开始就由我的托管服务提供商安装和配置,现在我需要以其他方式提高安全性或正确配置它。
答案3
你确定你需要吗缓存路由器模块?它不止一次给我带来了类似的问题。它占用大量内存(至少在使用 memcached 时),如果配置不正确,会使您的网站运行非常缓慢!
考虑到您所描述的流量,我认为您实际上完全可以不使用 CacheRouter,不过 Boost 还是很方便的。没有 CacheRouter,您的 Apache 内存使用量可能会大幅下降,从而为您的服务器提供更多的喘息空间。此外,如果您正在使用 memcached PHP 模块,请禁用它。您的 Apache 似乎占用了太多内存。
你的 Apache 设置也很奇怪。
TimeOut 300
太多了。将其降低到 10 到 30 之间。TraceEnable On
? 为什么?- 有时
KeepAlive On
弊大于利。你试过不用它吗?
答案4
这不是针对这个特定问题的答案,但这是我在尝试解决类似问题时不断找到的页面。希望能够帮助其他灯具管理员……
就我而言,问题出在 PHP 的 get_browser() 命令上。安装 browscap.ini(标准版)后,我的 apache 进程的内存使用量从 10Mb 增加到了 170Mb。运行一切正常,直到突然出现活动高峰。改用 browscap.ini 的精简版后,内存使用量又回到了更可接受的 10mb。