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を使用するいくつかの追加の要因があります。
sar
のようなプログラムを実行すると、CPUが使用されている場所の詳細が提供される場合があります。
〜1500のアクティブな接続がある場合、my.cnfを次のように変更することを検討してください:
thread_cache_size = 100 # v8 suggested CAP to minimize thread create/destroy.
詳細な分析については、元の投稿に以下を追加してください:
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;
最大5つの特定の提案について、1日あたり最大1つ適用するために、監視します。
あなたと
innodb_buffer_pool_size = 35G
あなたはおそらく使用を検討する必要があります
innodb_buffer_pool_instances = 8
並行性を改善し、競合を減らすため。