Joomla数据库内存泄漏

时间:2012-11-08 00:02:10

标签: php mysql joomla

我的客户有一个非常大的基于Joomla的网站,托管在Amazon EC2上,内存为1.5GB。服务器托管Apache和MySQL。目前,数据库大小约为250MB,网站每日流量约为5000.网站上看起来存在严重的内存泄漏,因为有时MySQL使用大约99%的CPU内存然后崩溃。我尝试过优化数据库表,修改我的.cnf,但仍然没有改进。

Joomla智能搜索使用的查找表占用超过100MB的db大小。我已禁用智能搜索,但问题仍然存在。

朋友们,请提出一些解决此问题的建议。

感谢。

以下是my.cnf文件

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0
bind-address            = 127.0.0.1

default-storage-engine=innodb
transaction-isolation    =   REPEATABLE-READ
character-set-server    =   UTF8
collation-server      =   UTF8_general_ci

max_connections         = 5000
wait_timeout            = 30
connect_timeout         = 60
#interactive_timeout     = 600
#max_connect_errors      = 1000000
#max_allowed_packet      = 10M


skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8

slow_query_log
long_query_time = 2

[mysqld_safe]
log-error=/var/log/mysqld.log
myisam_sort_buffer_size = 64M

1 个答案:

答案 0 :(得分:0)

我的赌注是你被一个流氓机器人击中 - 这是一个众多的搜索引擎优化蜘蛛之一,或像80legs这样的工具让人们编程机器人网络来执行任务 - 通常他们的编程中有错误导致轰炸。

我永远不会记得哪个MySQL设置占用内存一次,哪些是每个连接 - 但是当你设置允许多达5000个同时连接而一些缓冲区是2和8 MB时我会打赌总数重载下的内存使用量很容易超过可用的总RAM。

您当前的设置将允许您同时点击所有日常流量。我将其降低到一百或更低的设置,看看是否能提供更多的稳定性。

有各种MySQL调谐器脚本可以帮助您发现分配了太多内存的位置。

如果您有崩溃/高负载时的访问日志,我会检查恶意机器人 - 我们在我们监控/控制的一些网站上经常与他们进行斗争。

您还可以检查thread_concurrency值 - 具体取决于您可用的CPU数量。