我有 24gb RAM 和 4 核 LEMP 服务器,用于运行一个带有 Websocket PHP/Mysql 的应用程序,但问题是仅一个用户的 CPU 使用率就超过 10-18%,我不知道服务器是否会因许多用户(同时超过 100 个)而崩溃?
我在 Debian 7 上
我的配置(我添加了随机数)
key_buffer = 800M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 1000
query_cache_limit = 10M
query_cache_size = 124M
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
#log-queries-not-using-indexes
#innodb_read_io_threads=4
#innodb_write_io_threads=8 #To stress the double write buffer
#innodb_buffer_pool_load_at_startup=ON
#innodb_log_file_size = 32M #Small log files, more page flush
#innodb_log_files_in_group=2
#innodb_file_per_table=1
#innodb_log_buffer_size=8M
#innodb_flush_method=O_DIRECT
#innodb_flush_log_at_trx_commit=0
skip-name-resolve
innodb_buffer_pool_size=1G
innodb_buffer_pool_size = 3G
innodb_thread_concurrency = 12
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
fpm/php.ini
memory_limit = 1024M
memcached配置文件
-m 1024
Nginx
worker_processes 3;
这个配置好吗?还是我需要降低?谢谢你
答案1
什么占用了 CPU:
如果是 MySQL,请在慢查询日志中查找长查询,并解释该查询。然后在执行计划中为缺少索引的列添加索引。
您可以使用以下方式启用慢查询日志:
SET GLOBAL log_slow_queries=1;
您可以使用以下方法减少 long_query_time,例如:
SET GLOBAL long_query_time=0.5;
并启用无索引的日志查询:
SET GLOBAL log_queries_not_using_indexes=1;
您还可以使用类似方法从慢查询日志中提取最长的查询(阅读手册以了解排序选项):
mysqldumpslow -s t /path/to/slow_query.log
如果您的表是 InnoDB,我还会增加 innodb_buffer_pool_size(在您的配置中,您可以使用 1 或 3Gb 将此选项翻倍!)在专用的 MySQL 服务器上,我会放入大约 70% 的总内存。