我的网站今天似乎有超过 100 万次访问,通常约为 20,000 次,而且对我来说它似乎几乎没有响应。我做了一些侦查并优化了 Apache,修复了 PHP 会话的一个错误,但现在我遇到的问题是 MySQL 通常使用 100% 以上的 CPU。
服务器有 32GB RAM,大约有 50% 可用,无交换,3.3Ghz CPU,4 核,4 线程。
我已经关闭了 PHP 中的持久 MySQL 连接。
当我运行 SHOW PROCESSES(); 时,最多只有 8 个,并且没有一个停滞。
我的大部分表都是 MyISAM。InnoDB 表用的不多。
my.cnf的内容:
expire_logs_days = 10
max_binlog_size = 100M
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/
有人对要运行的命令有什么建议吗?要更改的设置?这可能会有所帮助。
或者服务器无法处理这么多流量。虽然每天 60 万次访问量还是没问题的。
更新
根据本文:
https://o6asan.com/blog-e/2014/07/03/how-to-see-mysql-server-status-by-phpmyadmin/
我进入 phpMyAdmin 状态面板,开始处理一些以红色突出显示的值。这似乎有点帮助。但是,就我而言,我认为我无能为力,因为服务器每秒处理大约 500 个查询。所以我将考虑打开我的 html 缓存。
启用 100MB 缓存的 MySQL 查询缓存也有很大不同。网站仍然很慢,但每次加载时都会运行,有时很快,有时很慢。
最终的解决方案是缓存整个站点,除了一些需要动态的页面。