X3220 四核 Linux Apache 服务器负载高

X3220 四核 Linux Apache 服务器负载高

我真的需要帮助。由于服务器负载过大,我的网站现在几乎无法使用。我的抵押贷款已经拖欠了一个月,这真的对我的处境没有任何帮助。几个月来,我一直在努力解决这个间歇性负载问题(从来没有这么严重过)。

我怀疑是某种攻击,因为我经常遭受 DDOS 攻击!我一直在试图找出造成负载的原因,但我担心自己没有足够的经验或知识来理解我所查看的所有数据。我甚至不知道从哪里开始或如何测试那里的大量攻击。

以下是一些您可能会觉得有用的数据...

服务器:Xeon X3220 四核 2.4 GHz - Linux、FreeBSD 500 GB HD 和 8 GB 内存。运行 Centos 版本 5.7 服务器版本:Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_qos/9.74

警告:所有网站都是软色情成人网站 - 大多数是精灵和亚马逊之类的幻想艺术。

1) 网站可能运行数周或数天,负载低于 10,然后开始跳升至 40-80 - 不知道为什么。相同的网站、相同的模块、相同的流量 - 就是 WHAM!

2) 我几乎每天都会收到一封电子邮件,上面写着:“来自 IP(每次都不同)的大量登录尝试失败”。我的网络托管服务商(几乎从不帮助我)告诉我这是 UDP 洪水之类的。

3) 我已将 MySQL 的端口从默认端口更改。如果我将其恢复为默认端口,则我将会收到超过 100 个负载,因为 mysql 端口必定会持续泛滥。

4) 我重新配置了MYSQL。链接: http://www.deadlyamazons.com/logs/mycnf.txt

5) 我有 3 个 Joomla Jomsocial 网络。我花了几周时间关闭所有模块/插件,等待一天,如果没有任何变化(没有变化),则在第二天或更晚的时候重新打开它们。例如,星期四我会关闭视频,星期五我会关闭聊天……等等,但负载没有任何明显变化。

6) Joomla 信息:所有 SEF 已关闭 - sh404sef 已完全禁用并删除。组件:Joomla 1.5.22、Jomsocial 2.0.5、Kunena 1/31/2011、HWDMediashare 11/22/2010 和 JBolo Chat 2.7.3、Comet Chat 或 Envolve Chat。页面压缩已开启,缓存已开启 15 分钟。

请点击此论坛查看我的所有报告的链接: http://forum.joomla.org/viewtopic.php?f=433&t=706035&p=2777500#p2777500

4/9/12 – 添加此部分:

大家好,我回来了,想分享一些有关我那台可怜的服务器的信息。服务器目前运行不稳定,负载在 20 到 60 之间,平均约为 30。

我将为解决问题增加奖励:通过 Paypal 支付 100 美元,以获得解决“负载”问题的答案,而无需建议购买 1 台或多台额外的服务器。同样,这些网站在较低功率的服务器上即使流量更高也能正常工作。

我刚刚重新编译了 apache 2.22,添加了 eaccelerator 和 zend-optimizer - 没有变化。我添加的另一个 mod 是 QOS,它将连接数保持在较低水平。我已经使用 QOS 一段时间了。

建议和要求:

是的,我确实关闭了 MySQL 端口,我应该提到这一点。

流量统计:

3月带宽:579.19G

千字节 2012 年 3 月:3,194,134,948 | 2011 年 12 月:3,504,864,832

2012 年 3 月访问量:920,619 | 2011 年 12 月访问量:727,843

页数 2012 年 3 月:10,231,430 | 2011 年 12 月:10,830,700

2012 年 3 月文件数:89,218,232 | 2011 年 12 月文件数:102,862,958

点击量 2012 年 3 月:106,515,577 | 2011 年 12 月:120,884,007

高负载下的 Top -C 视频: 这是我在服务器负载为 30% 到 40% 时拍摄的 2 个“Top -c”的 AVI。

下载 1.5 分钟/30M 的剪辑:http://www.mediafire.com/?yk3b5xota7l7s30

下载 30 秒/10M 的剪辑:http://www.mediafire.com/?4c2t37i8gmd189w

高负载下的 MySQL Processlist 视频 这里是服务器在 60-30 负载下运行时 CPanel 内部的 2 个“显示进程列表”的 AVI。

下载 2 分钟/40M 的剪辑:http://www.mediafire.com/?ymmfe8599bx11ho

下载 30 秒/10M 的剪辑:http://www.mediafire.com/?e675p3p1f0l65jt

DStat 统计数据:连续拍摄 4 张截图...链接:

http://www.deadlyamazons.com/logs/dstat01.jpg

http://www.deadlyamazons.com/logs/dstat02.jpg

http://www.deadlyamazons.com/logs/dstat03.jpg

http://www.deadlyamazons.com/logs/dstat04.jpg

Joomla Board 上以前无法看到的统计数据:

netstat -alntp |复制代码厕所 -l (1586)

netstat -n |复制代码grep SYN |wc -l (30)

netstat -anp |grep .tcp\|udp. | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n(无)

netstat -alntp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n - 报告:http://www.deadlyamazons.com/logs/netstat_alntp_awk_print_5_2.txt

netstat -alntp | grep :80 -http://www.deadlyamazons.com/logs/netstat_alntp_grep_80_2.txt

顶部(命令行)http://www.deadlyamazons.com/logs/top01_cli.jpg 前 2 名(命令行)http://www.deadlyamazons.com/logs/top02_cli.jpg 顶部 (WHM)http://www.deadlyamazons.com/logs/top01_whm.jpg 前 2 名 (WHM)http://www.deadlyamazons.com/logs/top02_whm.jpg IOStat(命令行)http://www.deadlyamazons.com/logs/iostat.jpg 每日流程日志 (WHM)http://www.deadlyamazons.com/logs/daily_process_log.jpg 进程跟踪 MYSQL (txt) (巨大!)http://www.deadlyamazons.com/logs/trace_mysql.txt 进程跟踪 MYSQL (rtf)http://www.deadlyamazons.com/logs/trace_mysql.rtf 进程跟踪 sxyamzn (txt)http://www.deadlyamazons.com/logs/sexyamazonscom_indexphp.txt 进程跟踪 sxyamzn (rtf)http://www.deadlyamazons.com/logs/sexyamazonscom_indexphp.rtf 进程跟踪 sleepps (txt)http://www.deadlyamazons.com/logs/sleeppeepscom_indexphp.txt 进程跟踪 sleepps (rtf)http://www.deadlyamazons.com/logs/sleeppeepscom_indexphp.rtf

任何帮助,将不胜感激。

答案1

这是我能看到的第一件出错的事情。尽量避免在同一台服务器上安装 MySQL 和 Apache。原因如下。

根据你提供的配置,我将其注入MySQL 使用量计算器

Session variables
max_allowed_packet 4.0 MB
sort_buffer_size 3.0 MB
net_buffer_length 16.0 KB
thread_stack 192.0 KB
read_rnd_buffer_size 8.0 MB
read_buffer_size 2.0 MB
join_buffer_size 96.0 MB
Total (per session)113.2 MB
Global variables
innodb_log_buffer_size 1.0 MB
query_cache_size 96.0 MB
innodb_buffer_pool_size 1.0 MB
innodb_additional_mem_pool_size 1.0 MB
key_buffer_size 384.0 MB
Total 483.0 MB
Total memory needed (for 300 connections): 33.6GB

你有 8GB。所以.. 你很快就会变得非常频繁地交换。你的服务器将用尽所有可用的内存来处理 MySQL,因为你告诉它这样做。其他一切都将进入交换空间。在磁盘上。很慢。IOWait 将飙升,导致需要磁盘访问的进程等待。这意味着进程将被阻止。这意味着平均负载也会飙升。

Joomla 在其标准、未调整的形式下有点难以应付。您在这个服务器上有多少个网站?可能是它无法应付。您在数据库和 Web 应用程序之间有一个像 Memcached 这样的层吗?(这可能仅需要更多 RAM)。Coppermine 也有点占用大量 CPU。一个简单的图库加载需要相当多的周期(或者说,上次我使用它时是这样的)。

建议:

  1. 当负载达到峰值时,尝试获取 IOWait 的测量值。Dstat 非常适合此操作。
  2. 调整你的 MySQL 限制到你实际需要的范围内,而不是这些巨大的缓冲区大小和缓存。
  3. 考虑购买另一台服务器,或调低 MySQL 使用率限制。虽然拥有 36GB 以上的数据库服务器并非不可能,但可能不需要,因为没有迹象表明预期负载。
  4. 或者,考虑仅分离 Web 和数据库服务器,以便每个服务器都可以更高效地完成自己的工作,而不是同时完成两者。
  5. 如果你有很多静态内容,你可能需要看看作为反向缓存代理。 
  6. 安装亚太经合组织或者加速器,这两个 PHP Opcode 缓存可以大大减少 PHP 使用的 RAM 量
  7. 看看你是如何运行 PHP 的。你可能会发现PHP-FPM为您提供更好的内存性能。如果您真的疯了/疯了/想自杀,您可以尝试使用嘻哈

答案2

除了 Tom 的回答之外,php 也可能存在问题,它会产生大量的负载。有时,在 Joomla 中,罪魁祸首是插件。检查您是否安装了新插件,并使用调试模式查看它们是否存在问题。它们造成负载的主要原因是它们会大量查询您的数据库。因此,请按照 Tom O'Connor 的建议,调整您的数据库。

还可以看看 php 的 eAccelerator。它会缓存您的页面,因此提供页面的速度会快得多。不过,这意味着会占用更多内存。

认真地讲,运行防火墙,如果不需要外部访问,则将其关闭(删除而不是拒绝)。

您可以尝试(我不能保证结果)运行 OSSEC 来阻止暴力破解尝试。我用它而且效果非常好。如果他们发起 TCP 同步或 UDP 洪水攻击,你唯一能做的就是请求 ISP 在流量到达你之前将其丢弃。

相关内容