我最近把我的magento商店从共享主机环境移到了私有VPS。 VPS运行CentOS,mysql,nginx和php-fpm。
我的VPS有4GB RAM和4个CPU核心。 目前我的网站很小,但希望其访问量会增加。
无论如何,这是我的问题。 Mysqld总是以90%的CPU运行。 即使在没有活动进程的情况下,在启动时也是如此。 不less于不多。 我已经search这个问题,但我还没有find任何可以用来解决这个问题。
如果有人愿意通过my.cnf文件,将不胜感激,看看问题是由错误的configuration引起的,我对这个服务器pipe理工作是相当新的。
[mysql] # CLIENT # port = 3306 socket = /var/lib/mysql/mysql.sock [mysqld] query_cache_limit=4M query_cache_size=16M query_cache_type=1 sort_buffer_size=1M read_buffer_size=2M read_rnd_buffer_size=1536K join_buffer_size=2M bulk_insert_buffer_size = 8M max_allowed_packet = 64M thread_stack = 192K # GENERAL # user = mysql default_storage_engine = InnoDB socket = /var/lib/mysql/mysql.sock pid_file = /var/run/mysqld/mysqld.pid symbolic-links=0 skip-networking skip-slave-start log_warnings=0 # SAFETY # skip_name_resolve innodb = FORCE innodb_strict_mode = 0 # DATA STORAGE # datadir = /var/lib/mysql tmpdir = /tmp # BINARY LOGGING # #log_bin = /var/lib/mysql/mysql-bin #expire_logs_days = 6 #sync_binlog = 1 max_connections=20 max_user_connections=10 wait_timeout=400 key_buffer_size=32M # 256M for 4GB, 512M for 8GB key_buffer=32M table_open_cache=1024 table_definition_cache=1024 max_heap_table_size=32M tmp_table_size=32M innodb_additional_mem_pool_size=8M innodb_buffer_pool_size=64M innodb_flush_log_at_trx_commit=2 innodb_support_xa = 0 innodb_flush_method=O_DIRECT innodb_log_file_size=32M innodb_log_files_in_group=2 innodb_use_sys_malloc=0 innodb_thread_concurrency=10 # Advanced low_priority_updates=1 concurrent_insert=2 thread_cache_size=32
非常感激! 非常感谢!
只显示以下内容:
202 | root | localhost | NULL | Query | 0 | NULL | show processlist
vmstat显示如下:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- rb swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 3215392 0 172600 0 0 28 10 0 16 69 7 2 0 23
Mysql显示进程列表;
+----+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+------------------+ | 11 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+------+-----------+------+---------+------+-------+------------------+ 1 row in set (0.00 sec)
在my.cnf文件中插入用于slow_query日志的行并查看slow-query.log
log-slow-queries = /var/log/slow-query.log
重启mysqld服务并执行
tail -f /var/log/slow-query.log
没有什么问题,你的my.cnfconfiguration。
确保你的数据库和表使用innodb而不是myISAM。 如果你有myisam – 那么你可能会遇到表锁,这将增加CPU使用率,因为更多的查询将被放入队列,直到锁被释放
根据你的configuration,你有真正的小站点(20并行连接 – 最大),所以stream量不是一个问题。
如果你运行一个自定义的网站 – 可能问题可能是效率低下的查询,那么你需要设置sloq查询日志,并在2秒后监视执行时间慢的查询。 如果您的查询运行时间超过15秒,则您的索引有问题。
您将需要检查您的表中有多less条logging,然后应用索引或对数据库进行非规范化处理
另一个问题是你可能在“拥挤的”虚拟化环境中获得VPS。 这意味着你可能会有非常无效的IO或为来自其他VM的内存/ CPU而战。 跑
vmstat 1
并观看专栏
给我们输出以下命令