Mysql
MySQL 使用 100% 的 CPU 和 1500 個活動連接
我在使用MySQL時遇到問題。我有一個執行一些 cron 作業的系統,這些作業創建了大量的數據庫連接。當它達到大約1500 個活動連接時,cpu 使用率達到 100%,但記憶體保持正常。我的伺服器配置是:
CentOS release 6.6 (Final) Model Intel(R) Xeon(R) CPU E5-1660 v3 @ 3.00GHz Cores 16 Speed 1278.984 MHz Cache 20480 KB Memory 130GB
文件 my.cnf:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 max_connect_errors=100 open-files=64 interactive_timeout=60 wait_timeout=10 max_connections=2000 max_allowed_packet=5M tmp_table_size=100M max_heap_table_size=100M #query cache desativado query_cache_type = 0 query_cache_limit = 50M sort_buffer_size= 1M read_buffer_size= 128K read_rnd_buffer_size=1M #join_buffer_size=208M join_buffer_size=8M key_buffer_size=20M myisam_sort_buffer_size=10M thread_cache_size = 30 key_buffer=100M open_files_limit=64 default-storage-engine=MyISAM innodb_file_per_table=1 innodb_buffer_pool_size=35G innodb_additional_mem_pool_size=80M query_cache_size=50M back_log=75 expire_logs_days = 1 max_binlog_size = 30M tmpdir = /var/mysqltmpdir long_query_time=1 log_slow_queries=/var/log/mysql_slow_queries.log [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid bind-address = * port = 3306
您可能遇到過馮諾依曼瓶頸。
隨著連接數的增加,CPU 使用率預計會增加。隨著連接的增加,活動查詢的數量也應該增加。每個查詢都會使用一些 CPU。最終,您將有足夠的查詢來使用所有可用的 CPU。
隨著並發執行的查詢數量的增加,還有一些額外的因素會使用更多的 CPU:
- 等待資源鎖所花費的時間。這可能涉及鎖旋轉,這將消耗額外的 CPU。
- 作業系統切換目前正在執行的查詢時的上下文切換。這是多處理的副作用,它允許您一次執行多個查詢。
執行類似的程序
sar
可能會提供有關 CPU 使用位置的更多詳細資訊。
和你的
innodb_buffer_pool_size = 35G
你可能應該考慮使用
innodb_buffer_pool_instances = 8
以提高並發性並減少爭用。