我有 1 台带有 Apache Nginx 代理的专用服务器。Memcache、mysql、4G Ram。
这些天,我的网站访问量没有增加,但我的服务器总是在特定时间段内超载。(上午 9 点 - 下午 3 点)
内存使用量每秒都在增加,直到满。那一刻,我的服务器就会超载。
我必须终止所有 apache、mysql 服务并重新启动它以获取可用内存。这就是循环。
这是我目前正在使用的 RAM 160(nginx)220(apache)512(memcache)924(mysql)这是进程编号 4(nginx)14(apache)5(memcache)20(mysql)
这是我的 my.cnf 配置。有人可以帮我优化它吗?
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
skip-locking
skip-networking
skip-name-resolve
# enable log-slow-queries
log-slow-queries = /var/log/mysql-slow-queries.log
long_query_time=3
max_connections=200
wait_timeout=64
connect_timeout = 10
interactive_timeout = 25
thread_stack = 512K
max_allowed_packet=16M
table_cache=1500
read_buffer_size=4M
join_buffer_size=4M
sort_buffer_size=4M
read_rnd_buffer_size = 4M
max_heap_table_size=256M
tmp_table_size=256M
thread_cache=256
query_cache_type=1
query_cache_limit=4M
query_cache_size=16M
thread_concurrency=8
myisam_sort_buffer_size=128M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqldump]
quick
max_allowed_packet=16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer=256M
sort_buffer=256M
read_buffer=64M
write_buffer=64M
[myisamchk]
key_buffer=256M
sort_buffer=256M
read_buffer=64M
write_buffer=64M
[mysqlhotcopy]
interactive-timeout
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
答案1
我不确定您收到了多少请求,但我想说,首先您需要找出瓶颈在哪里。就您使用的应用程序数量而言,它已经超载了。以下是一些建议,
1. 最重要的是,确保您的代码已优化。尝试找出是否有任何代码或对数据库的查询是瓶颈。检查 MySql 的所有注意事项。缓存查询结果,这会减慢速度。2
. 确保您使用的是 PHP-FPM。3
. 使用 APC 进行操作码缓存。4
. 如果可能,请在自己的服务器(或虚拟服务器)上托管 MySql。5.
如果您使用 Nginx 仅提供静态内容,使用 Apache 提供动态内容,我建议您删除 Apache 并使用 Nginx 提供静态和动态内容。
希望这可以提高您的服务器性能。
关于您的“my.cnf 配置”,我不是这方面的专家,所以我无法帮助您。