Mysql 顯示 100% CPU 使用率
我在使用 Cpanel 安裝的 MYSQL 伺服器時遇到了一些問題。即使我在網路上沒有太多流量,我的伺服器也顯示 100% 的 mysql 使用率。
我正在執行帶有 80GB SSD 和 8GB Ram 和 4CPU 核心的 CentOS 6.5x64。
我的.cnf:
[mysqld] max_connections=500 key_buffer=128M myisam_sort_buffer_size=35M join_buffer_size=1M read_buffer_size=1M sort_buffer_size=2M table_cache=4000 thread_cache_size=286 interactive_timeout=25 wait_timeout=7000 connect_timeout=10 max_allowed_packet=268435456 max_connect_errors=10 query_cache_limit=2M query_cache_size=256M query_cache_type=1 tmp_table_size=16M innodb_buffer_pool_size=134217728 open_files_limit=10000 [mysqld_safe] [mysqldump] quick max_allowed_packet=16M [myisamchk] key_buffer=64M sort_buffer=64M read_buffer=16M write_buffer=16M
這是 MySQLTuner 的輸出:
-------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in MyISAM tables: 164M (Tables: 88) [--] Data in InnoDB tables: 33M (Tables: 239) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 129 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 15m 2s (83K q [92.549 qps], 13K conn, TX: 44M, RX: 5M) [--] Reads / Writes: 61% / 39% [--] Total buffers: 544.0M global + 4.5M per thread (500 max threads) [OK] Maximum possible memory usage: 2.7G (34% of installed RAM) [OK] Slow queries: 0% (0/83K) [OK] Highest usage of available connections: 23% (116/500) [OK] Key buffer size / total MyISAM indexes: 128.0M/59.2M [OK] Key buffer hit rate: 97.9% (24K cached / 527 reads) [OK] Query cache efficiency: 54.3% (18K cached / 33K selects) [OK] Query cache prunes per day: 0 [OK] Sorts requiring temporary tables: 1% (5 temp sorts / 388 sorts) [OK] Temporary tables created on disk: 0% (0 on disk / 374 total) [OK] Thread cache hit rate: 99% (116 created / 13K connections) [OK] Table cache hit rate: 98% (465 open / 474 opened) [OK] Open file limit used: 3% (311/10K) [!!] Table locks acquired immediately: 58% [OK] InnoDB buffer pool / data size: 128.0M/33.6M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance MySQL started within last 24 hours - recommendations may be inaccurate Enable the slow query log to troubleshoot bad queries Optimize queries and/or use InnoDB to reduce lock wait
這是我的 TOP 的輸出:
top - 12:01:06 up 1 day, 1:02, 1 user, load average: 10.37, 9.22, 8.61 Tasks: 399 total, 1 running, 397 sleeping, 0 stopped, 1 zombie Cpu(s): 84.1%us, 15.1%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.2%si, 0.7%st Mem: 8191528k total, 6042780k used, 2148748k free, 242064k buffers Swap: 0k total, 0k used, 0k free, 4785012k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24515 mysql 20 0 2732m 165m 6264 S 303.8 2.1 42:43.18 mysqld 19471 root 20 0 174m 10m 6148 S 1.0 0.1 0:00.03 php 19523 root 20 0 172m 10m 5864 S 1.0 0.1 0:00.03 php 19533 root 20 0 172m 9m 5804 S 0.7 0.1 0:00.02 php 19535 root 20 0 172m 10m 5864 S 0.7 0.1 0:00.02 php
這個問題的原因可能是什麼?
我是否必須更改 my.cnf 以防止伺服器掛起?
還是我需要購買一個 16GB 記憶體的新伺服器?
查看您的詳細資訊,我們可以得出以下一般性建議:
- 您的**READ: WRITE 比率 (61: 39)**提供了您的引擎類型應該更改為的線索
Innodb
。在此之前檢查輸出SHOW ENGINE INNODB STATUS\G; SHOW FULL PROCESSLIST;
在高峰時段。您很可能會在
LOCK
狀態中看到查詢。表鎖是MyISAM
. 如果您有大量的並發寫入和選擇,並且查詢性能必須始終如一,Innodb
由於更好的鎖定機制,這是唯一的選擇(row-level
) 2. 碎片表總數:129。執行OPTIMIZE TABLE
和碎片整理以獲得更好的性能 3. 查看您的slow_query.log,檢查 Query_time、Lock_time、Rows_sent、Rows_examined。如果您發現Rows Sent / Rows Examined
集合比率較高的查詢,則這些查詢適用於optimization
. slow_query.log 中的某些查詢可能會佔用大量 CPU 資源。 4. 檢查有關 RAM 和可用磁碟空間的伺服器狀態:free -m , df -h
。如果您有可用記憶體,請增加記憶體innodb_buffer_pool_size
以便有更多記憶體。 5. 在 MySQL 配置中調整這些參數總是好的
innodb_fast_shutdown=0 innodb_log_buffer_size innodb_log_file_size innodb_flush_method=O_DIRECT query_cache_size=0
警告:
- 清單 1:MySQL 程序的 CPU,如果可能,增加 CPU
- 清單 2:RAM,如果數據集適合 RAM。
- 清單 3:連接相關參數
ABORTED_CONNECTS
,CONNECTIONS
,MAX_USED_CONNECTIONS
,OPEN_FILES
,OPEN_TABLES
,OPENED_FILES
,OPENED_TABLES
,QUERIES
,SLOW_QUERIES
,THREADS_CONNECTED
,THREADS_CREATED
,THREADS_RUNNING
,PERFORMANCE_SCHEMA
,QUERY_CACHE_SIZE
,WAIT_TIMEOUT
,LONG_QUERY_TIME
,INTERACTIVE_TIMEOUT
,CONNECT_TIMEOUT
,MAX_CONNECTIONS
,LOCK_WAIT_TIMEOUT
,TX_ISOLATION
,MAX_ALLOWED_PACKET
,GENERAL_LOG
,TABLE_OPEN_CACHE
,SLOW_QUERY_LOG
,OPEN_FILES_LIMIT
,INNODB_LOCK_WAIT_TIMEOUT
- 清單 4:記憶體相關參數
key_buffer_size
,query_cache_size
,innodb_buffer_pool_size,innodb_log_buffer_size
,max_connections
,read_buffer_size
,read_rnd_buffer_size
,sort_buffer_size
,join_buffer_size
,binlog_cache_size
,thread_stack
,tmp_table_size
- 清單 5:其他重要的 InnoDB 參數 innodb_log_file_size ,innodb_file_per_table ,innodb_flush_log_at_trx_commit ,innodb_flush_method ,innodb_fast_shutdown
- 清單 6:mysqltuner
不使用索引執行的連接:表記憶體命中率:
-------- MyISAM Metrics -------------------------------------------- [!!] [!!] Write Key buffer hit rate: -------- InnoDB Metrics -------------------------------------------- [!!] InnoDB buffer pool / data size: [!!] Ratio InnoDB log file size / InnoDB Buffer pool size : [!!] InnoDB buffer pool instances:
- Checklist 7: Processlist 發現以下查詢長時間處於“發送數據”狀態
- 清單 8:慢查詢日誌 - Rows_examined 與 Rows_sent 比率非常高,
- 清單 9:重複索引(如果有)
- 清單 10:解釋幾個慢查詢的計劃
- 清單 11:檢查 where 子句列是否被正確索引(非索引查詢)
- 檢查表 12:檢查表鎖、元數據鎖、死鎖(如果有)。
- 清單 13:任何維護作業都在間隔執行(例如,mysqlcheck、mysqldump 等)
- 清單 14:硬體資源、慢速磁碟、RAID 重建、磁碟 I/O、飽和網路、網路頻寬和吞吐量以及執行緒數量的增加。