LINUX.ORG.RU
ФорумAdmin

Сильно тормозит сайт из-за Mysql. PHP в режиме FastCGI (Nginx + PHP-FPM), прошу совета знающих людей

 , , , ,


1

5

Привет всем, надеюсь на помощь профессионалов, многого еще не знаю, но самостоятельно решить проблему не получается, пытаюсь долгое время разобраться в медленной работе сайта, а именно: долгом ответе сервера из-за работы Mysql, /usr/sbin/mysqld грузит оперативной памяти 30-50%, сервер отвечает по тестам 6-15 секунд, после грузится остальное уже быстро.

ресурсы

Имеется виртуальный сервер на Xeon 2*2.50GHz, 1 гб ОЗУ, стоит ubuntu 16.04.3, PHP 7.0.8, MySQL 5.7.16. Сайт на wordpress в режиме FastCGI (Nginx + PHP-FPM). Процессор грузится не более чем на 10%, посетителей в день 150-400. Грешу на не правильную настройку Mysql, могу ошибаться конечно, поэтому отправляю все конфиги, где я изменял значения по умолчанию: /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address		127.0.0.1
expire-logs-days	10
innodb-buffer-pool-size	270мб
innodb-flush-method	O_DIRECT
innodb-log-file-size	68мб
interactive-timeout	300
key-buffer-size		16мб
local-infile		FALSE
max-allowed-packet	16мб
max-binlog-size		100мб
max-connections         151
max-connect-errors	1000
max-join-size           1000000
max_heap_table_size     96мб
myisam-recover-options	BACKUP
pid-file		/var/run/mysqld/mysqld.pid
query-cache-size	32мб
read_buffer_size        128кб
symbolic-links		FALSE
table-definition-cache	2000
tmp_table_size          96мб 
thread-cache-size	8
thread-stack		196608
wait-timeout		300

MySQLTuner

[!!] Overall possible memory usage with other process exceeded memory
[!!] Aborted connections: 7.14%  (1/14)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance 
[!!] Temporary tables created on disk: 33% (55 on disk / 163 total)
[!!] Key buffer used: 18.2% (3M used / 16M cache)
[!!] Read Key buffer hit rate: 50.0% (6 cached / 3 reads)
    Reduce or eliminate unclosed connections and network issues                             
    Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1                                                                            
    When making adjustments, make tmp_table_size/max_heap_table_size equal                  
    Reduce your SELECT DISTINCT queries which have no LIMIT clause                          
Variables to adjust:                                                                        
    tmp_table_size (> 96M)                                                                  
    max_heap_table_size (> 96M)  

/var/log/mysql error.log

2016-11-13T20:46:39.341249Z 0 [Note] Event Scheduler: Purging the queue. 0 events
2016-11-13T20:46:39.341406Z 0 [Note] Binlog end
2016-11-13T20:46:39.341844Z 0 [Note] Shutting down plugin 'auth_socket'
2016-11-13T20:46:39.341869Z 0 [Note] Shutting down plugin 'ngram'
2016-11-13T20:46:39.341880Z 0 [Note] Shutting down plugin 'ARCHIVE'
2016-11-13T20:46:39.341889Z 0 [Note] Shutting down plugin 'BLACKHOLE'
2016-11-13T20:46:39.341900Z 0 [Note] Shutting down plugin 'partition'
2016-11-13T20:46:39.341912Z 0 [Note] Shutting down plugin 'PERFORMANCE_SCHEMA'
2016-11-13T20:46:39.341981Z 0 [Note] Shutting down plugin 'INNODB_SYS_VIRTUAL'
2016-11-13T20:46:39.341995Z 0 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES'
2016-11-13T20:46:39.342005Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESPACES'
2016-11-13T20:46:39.342015Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN_COLS'
2016-11-13T20:46:39.342025Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN'
2016-11-13T20:46:39.342032Z 0 [Note] Shutting down plugin 'INNODB_SYS_FIELDS'
2016-11-13T20:46:39.342036Z 0 [Note] Shutting down plugin 'INNODB_SYS_COLUMNS'
2016-11-13T20:46:39.342041Z 0 [Note] Shutting down plugin 'INNODB_SYS_INDEXES'
2016-11-13T20:46:39.342046Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESTATS'
2016-11-13T20:46:39.342051Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLES'
2016-11-13T20:46:39.342055Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_TABLE'
2016-11-13T20:46:39.342060Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_CACHE'
2016-11-13T20:46:39.342065Z 0 [Note] Shutting down plugin 'INNODB_FT_CONFIG'
2016-11-13T20:46:39.342069Z 0 [Note] Shutting down plugin 'INNODB_FT_BEING_DELETED'
2016-11-13T20:46:39.342074Z 0 [Note] Shutting down plugin 'INNODB_FT_DELETED'
2016-11-13T20:46:39.342078Z 0 [Note] Shutting down plugin 'INNODB_FT_DEFAULT_STOPWORD'
2016-11-13T20:46:39.342083Z 0 [Note] Shutting down plugin 'INNODB_METRICS'
2016-11-13T20:46:39.342088Z 0 [Note] Shutting down plugin 'INNODB_TEMP_TABLE_INFO'
2016-11-13T20:46:39.342092Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_POOL_STATS'
2016-11-13T20:46:39.342097Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE_LRU'
2016-11-13T20:46:39.342101Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE'
2016-11-13T20:46:39.342106Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX_RESET'
2016-11-13T20:46:39.342111Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX'
2016-11-13T20:46:39.342115Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM_RESET'
2016-11-13T20:46:39.342120Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM'
2016-11-13T20:46:39.342125Z 0 [Note] Shutting down plugin 'INNODB_CMP_RESET'
2016-11-13T20:46:39.342130Z 0 [Note] Shutting down plugin 'INNODB_CMP'
2016-11-13T20:46:39.342134Z 0 [Note] Shutting down plugin 'INNODB_LOCK_WAITS'
2016-11-13T20:46:39.342139Z 0 [Note] Shutting down plugin 'INNODB_LOCKS'
2016-11-13T20:46:39.342143Z 0 [Note] Shutting down plugin 'INNODB_TRX'
2016-11-13T20:46:39.342148Z 0 [Note] Shutting down plugin 'InnoDB'
2016-11-13T20:46:39.342260Z 0 [Note] InnoDB: FTS optimize thread exiting.
2016-11-13T20:46:39.342400Z 0 [Note] InnoDB: Starting shutdown...
2016-11-13T20:46:39.442585Z 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
2016-11-13T20:46:39.443172Z 0 [Note] InnoDB: Buffer pool(s) dump completed at 161113 23:46:39
2016-11-13T20:46:40.466838Z 0 [Note] InnoDB: Shutdown completed; log sequence number 1141956924
2016-11-13T20:46:40.471227Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
2016-11-13T20:46:40.471246Z 0 [Note] Shutting down plugin 'CSV'
2016-11-13T20:46:40.471255Z 0 [Note] Shutting down plugin 'MyISAM'
2016-11-13T20:46:40.471275Z 0 [Note] Shutting down plugin 'MEMORY'
2016-11-13T20:46:40.471290Z 0 [Note] Shutting down plugin 'MRG_MYISAM'
2016-11-13T20:46:40.471301Z 0 [Note] Shutting down plugin 'sha256_password'
2016-11-13T20:46:40.471306Z 0 [Note] Shutting down plugin 'mysql_native_password'
2016-11-13T20:46:40.471533Z 0 [Note] Shutting down plugin 'binlog'
2016-11-13T20:46:40.472118Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
2016-11-13T20:46:40.718056Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-11-13T20:46:40.719750Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.16-0ubuntu0.16.04.1) starting as process 9852 ...
2016-11-13T20:46:40.724749Z 0 [Note] InnoDB: PUNCH HOLE support available
2016-11-13T20:46:40.724787Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-11-13T20:46:40.724795Z 0 [Note] InnoDB: Uses event mutexes
2016-11-13T20:46:40.724801Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2016-11-13T20:46:40.724808Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-11-13T20:46:40.724814Z 0 [Note] InnoDB: Using Linux native AIO
2016-11-13T20:46:40.725110Z 0 [Note] InnoDB: Number of pools: 1
2016-11-13T20:46:40.725235Z 0 [Note] InnoDB: Using CPU crc32 instructions
2016-11-13T20:46:40.726915Z 0 [Note] InnoDB: Initializing buffer pool, total size = 384M, instances = 1, chunk size = 128M
2016-11-13T20:46:40.754858Z 0 [Note] InnoDB: Completed initialization of buffer pool
2016-11-13T20:46:40.760159Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2016-11-13T20:46:40.773092Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2016-11-13T20:46:40.799094Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2016-11-13T20:46:40.799210Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2016-11-13T20:46:40.824585Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2016-11-13T20:46:40.826613Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2016-11-13T20:46:40.826647Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2016-11-13T20:46:40.827246Z 0 [Note] InnoDB: Waiting for purge to start
2016-11-13T20:46:40.877981Z 0 [Note] Plugin 'FEDERATED' is disabled.
2016-11-13T20:46:40.882895Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2016-11-13T20:46:40.886109Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2016-11-13T20:46:41.890806Z 0 [Note] InnoDB: Buffer pool(s) load completed at 161113 23:46:41
2016-11-13T21:16:30.334636Z 0 [Note] Giving 1 client threads a chance to die gracefully
2016-11-13T21:16:30.334689Z 0 [Note] Shutting down slave threads
2016-11-13T21:16:32.334764Z 0 [Note] Forcefully disconnecting 1 remaining clients
2016-11-13T21:16:32.334833Z 0 [Warning] /usr/sbin/mysqld: Forcing close of thread 694  user: 'root'
2016-11-13T21:16:32.334873Z 0 [Note] Event Scheduler: Purging the queue. 0 events
2016-11-13T21:16:32.335122Z 0 [Note] Binlog end
2016-11-13T21:16:32.339336Z 0 [Note] Shutting down plugin 'auth_socket'
2016-11-13T21:16:32.339392Z 0 [Note] Shutting down plugin 'ngram'
2016-11-13T21:16:32.339403Z 0 [Note] Shutting down plugin 'ARCHIVE'
2016-11-13T21:16:32.339412Z 0 [Note] Shutting down plugin 'BLACKHOLE'
2016-11-13T21:16:32.339423Z 0 [Note] Shutting down plugin 'partition'
2016-11-13T21:16:32.339431Z 0 [Note] Shutting down plugin 'PERFORMANCE_SCHEMA'
2016-11-13T21:16:32.339476Z 0 [Note] Shutting down plugin 'INNODB_SYS_VIRTUAL'
2016-11-13T21:16:32.339515Z 0 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES'
2016-11-13T21:16:32.339525Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESPACES'
2016-11-13T21:16:32.339532Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN_COLS'
2016-11-13T21:16:32.339539Z 0 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN'
2016-11-13T21:16:32.339546Z 0 [Note] Shutting down plugin 'INNODB_SYS_FIELDS'
2016-11-13T21:16:32.339553Z 0 [Note] Shutting down plugin 'INNODB_SYS_COLUMNS'
2016-11-13T21:16:32.339560Z 0 [Note] Shutting down plugin 'INNODB_SYS_INDEXES'
2016-11-13T21:16:32.339568Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLESTATS'
2016-11-13T21:16:32.339574Z 0 [Note] Shutting down plugin 'INNODB_SYS_TABLES'
2016-11-13T21:16:32.339582Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_TABLE'
2016-11-13T21:16:32.339589Z 0 [Note] Shutting down plugin 'INNODB_FT_INDEX_CACHE'
2016-11-13T21:16:32.339596Z 0 [Note] Shutting down plugin 'INNODB_FT_CONFIG'
2016-11-13T21:16:32.339603Z 0 [Note] Shutting down plugin 'INNODB_FT_BEING_DELETED'
2016-11-13T21:16:32.339610Z 0 [Note] Shutting down plugin 'INNODB_FT_DELETED'
2016-11-13T21:16:32.339617Z 0 [Note] Shutting down plugin 'INNODB_FT_DEFAULT_STOPWORD'
2016-11-13T21:16:32.339624Z 0 [Note] Shutting down plugin 'INNODB_METRICS'
2016-11-13T21:16:32.339632Z 0 [Note] Shutting down plugin 'INNODB_TEMP_TABLE_INFO'
2016-11-13T21:16:32.339639Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_POOL_STATS'
2016-11-13T21:16:32.339646Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE_LRU'
2016-11-13T21:16:32.339653Z 0 [Note] Shutting down plugin 'INNODB_BUFFER_PAGE'
2016-11-13T21:16:32.339660Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX_RESET'
2016-11-13T21:16:32.339667Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX'
2016-11-13T21:16:32.339674Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM_RESET'
2016-11-13T21:16:32.339681Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM'
2016-11-13T21:16:32.339688Z 0 [Note] Shutting down plugin 'INNODB_CMP_RESET'
2016-11-13T21:16:32.339695Z 0 [Note] Shutting down plugin 'INNODB_CMP'
2016-11-13T21:16:32.339702Z 0 [Note] Shutting down plugin 'INNODB_LOCK_WAITS'
2016-11-13T21:16:32.339709Z 0 [Note] Shutting down plugin 'INNODB_LOCKS'
2016-11-13T21:16:32.339716Z 0 [Note] Shutting down plugin 'INNODB_TRX'
2016-11-13T21:16:32.339723Z 0 [Note] Shutting down plugin 'InnoDB'
2016-11-13T21:16:32.339835Z 0 [Note] InnoDB: FTS optimize thread exiting.
2016-11-13T21:16:32.340040Z 0 [Note] InnoDB: Starting shutdown...
2016-11-13T21:16:32.440431Z 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
2016-11-13T21:16:32.442102Z 0 [Note] InnoDB: Buffer pool(s) dump completed at 161114  0:16:32
2016-11-13T21:16:33.693460Z 0 [Note] InnoDB: Shutdown completed; log sequence number 1145487137
2016-11-13T21:16:33.696592Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
2016-11-13T21:16:33.696612Z 0 [Note] Shutting down plugin 'CSV'
2016-11-13T21:16:33.696620Z 0 [Note] Shutting down plugin 'MyISAM'
2016-11-13T21:16:33.696636Z 0 [Note] Shutting down plugin 'MEMORY'
2016-11-13T21:16:33.696643Z 0 [Note] Shutting down plugin 'MRG_MYISAM'
2016-11-13T21:16:33.696649Z 0 [Note] Shutting down plugin 'sha256_password'
2016-11-13T21:16:33.696654Z 0 [Note] Shutting down plugin 'mysql_native_password'
2016-11-13T21:16:33.696846Z 0 [Note] Shutting down plugin 'binlog'
2016-11-13T21:16:33.697556Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
2016-11-13T21:16:34.391910Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-11-13T21:16:34.393679Z 0 [Note] /usr/sbin/mysqld (mysqld 5.7.16-0ubuntu0.16.04.1) starting as process 11999 ...
2016-11-13T21:16:34.398826Z 0 [Note] InnoDB: PUNCH HOLE support available
2016-11-13T21:16:34.398868Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2016-11-13T21:16:34.398901Z 0 [Note] InnoDB: Uses event mutexes
2016-11-13T21:16:34.398909Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
2016-11-13T21:16:34.398917Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
2016-11-13T21:16:34.398926Z 0 [Note] InnoDB: Using Linux native AIO
2016-11-13T21:16:34.399236Z 0 [Note] InnoDB: Number of pools: 1
2016-11-13T21:16:34.399367Z 0 [Note] InnoDB: Using CPU crc32 instructions
2016-11-13T21:16:34.401161Z 0 [Note] InnoDB: Initializing buffer pool, total size = 384M, instances = 1, chunk size = 128M
2016-11-13T21:16:34.430483Z 0 [Note] InnoDB: Completed initialization of buffer pool
2016-11-13T21:16:34.435956Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2016-11-13T21:16:34.448305Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
2016-11-13T21:16:34.477302Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2016-11-13T21:16:34.477400Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2016-11-13T21:16:34.506522Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2016-11-13T21:16:34.508083Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
2016-11-13T21:16:34.508110Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
2016-11-13T21:16:34.508531Z 0 [Note] InnoDB: Waiting for purge to start
2016-11-13T21:16:34.564382Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2016-11-13T21:16:35.618270Z 0 [Note] InnoDB: Buffer pool(s) load completed at 161114  0:16:35

nginx vhosts NAME.conf

	fastcgi_cache_path /etc/nginx/vhosts-resources/NAME.ru levels=2 keys_zone=NAME:100m max_size=256m inactive=60m;
	
	server {
	server_name NAME.ru www.NAME.ru;
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/NAME.ru/*.conf;
	access_log /var/www/httpd-logs/NAME.ru.access.log;
	error_log /var/www/httpd-logs/NAME.ru.error.log notice;
	ssi on;
	set $root_path /var/www/www-root/data/www/NAME.ru;
	root $root_path;
	rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;
        rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
        rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
        rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
	
	if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
	set $do_not_cache 1;
	}
	fastcgi_cache_bypass $do_not_cache;
	fastcgi_no_cache $do_not_cache;
	fastcgi_pass_header Cookie;
        fastcgi_cache_use_stale error timeout invalid_header http_500;
	fastcgi_cache NAME; 
	fastcgi_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
	fastcgi_cache_valid 200 301 302 304 8h;
	fastcgi_cache_valid 404 8h;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
	
	location ~* ^.+.(jpg|jpeg|gif|png|ico|css|pdf|ppt|txt|bmp|rtf|js|zip|rar)$ {
		root /var/www/www-root/data/www/NAME.ru; 
		expires 10d; 
		access_log off; 
		log_not_found off; 
    }
	
	location @php {
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f NAME@mail.ru";
		fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
	
	location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_index index.php;
		fastcgi_ignore_client_abort off;
		fastcgi_connect_timeout 60;
		fastcgi_send_timeout 180;
		fastcgi_read_timeout 180;
		fastcgi_buffer_size 128k;
		fastcgi_buffers 4 256k;
		fastcgi_busy_buffers_size 256k;
		fastcgi_temp_file_write_size 256k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        try_files $uri @wordpress;
        fastcgi_pass unix:/var/www/php-fpm/www-root.sock; 
		}
		
	location @wordpress {
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_NAME /index.php;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_index index.php;
        fastcgi_pass unix:/var/www/php-fpm/www-root.sock; 
    }

	location ~ ^/(wp-admin/.*\.php|wp-login\.php|wp-register\.php|(feed|comment/feed)(/.*)?)$ {
        try_files $uri @wordpress;
        set $do_not_cache 1;
        fastcgi_cache_bypass 1;
        fastcgi_no_cache 1;
        fastcgi_pass unix:/var/www/php-fpm/ch33ch.sock; #не забудьте поменять
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }	
	
	location / {
		try_files $uri $uri/ /index.php?$args;
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}	
	
	gzip on; 
        gzip_disable "msie6"; 
	gzip_min_length 1000;
        gzip_proxied     any;
        gzip_comp_level 7; 
        gzip_buffers 16 8k; 
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
	expires 3d;
	server_tokens off;
	open_file_cache max=65000 inactive=200s;
	open_file_cache_valid 300s;
	open_file_cache_min_uses 2;
	open_file_cache_errors on;
	listen IP:80 default_server;
}  

nginx.conf

user www-data;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  65;

    gzip on; 
    gzip_disable "msie6"; 
    gzip_vary on;
    gzip_min_length 1000;
    gzip_comp_level 7;
    gzip_buffers 16 8k; 
    gzip_static on;
    gzip_proxied any; 
    gzip_types 
       text/plain 
       text/css 
       text/js 
       text/xml 
       text/javascript 
       application/javascript 
       application/x-javascript 
       application/json 
       application/xml 
       application/xml+rss;
	   server_tokens off;

    include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/vhosts/*/*.conf;
	client_max_body_size 128m;
	server {
		server_name localhost;
	disable_symlinks if_not_owner;
	listen 80;
	include /etc/nginx/vhosts-includes/*.conf;
	location @fallback {
		error_log /dev/null crit;
		proxy_pass http://127.0.0.1:8080;
		proxy_redirect http://127.0.0.1:8080 /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		access_log off ;
	}
	}
}

/etc/php/7.0/fpm/php.ini

max_execution_time		30
max_file_uploads		20
max_input_nesting_level		64
max_input_time			60
max_input_vars			1000
memory_limit			128M
output_buffering		4096
post_max_size			200M
realpath_cache_size		16K
realpath_cache_ttl		120
upload_max_filesize		200M
opcache.enable			On
opcache.file_cache_only		0
opcache.file_update_protection	2
opcache.force_restart_timeout	180
opcache.inherited_hack		On
opcache.interned_strings_buffer	4
opcache.lockfile_path	/	tmp
opcache.max_accelerated_files	2000
opcache.max_file_size		0
opcache.max_wasted_percentage	5
opcache.memory_consumption	64
opcache.protect_memory		0
opcache.revalidate_freq		2
opcache.save_comments		1
opcache.use_cwd			On
opcache.validate_timestamps	On
cgi.check_shebang_line		1
cgi.discard_path		0
cgi.fix_pathinfo		1
cgi.force_redirect		1
cgi.nph				0
cgi.rfc2616_headers		0
fastcgi.logging			1
memcache.chunk_size		32768
memcache.compress_threshold	20000
memcache.lock_timeout		15
session.auto_start		0
session.cache_expire		180
session.cache_limiter		nocache
session.save_handler		files
session.save_path		/var/lib/php/sessions
session.serialize_handler	php

Много менял параметры mysql, но казалось становилось хуже и хуже, после тюнинга mysql также. Жду любых советов от Вас и поправок, что мне нужно еще прислать для более полного понимания работы? подскажите куда мне копать? Спасибо за любую помощь заранее

Перемещено leave из general

сервер отвечает по тестам 6-15 секунд, после грузится остальное уже быстро

Похоже на проблемы с dns

Попробуйте в mysql включить опцию skip-name-resolve

ism ★★★ ()
Ответ на: комментарий от ism

Включил skip-name-resolve, dns 85 милисекунд отвечает. Картина такая, что жму обновить страницу на сайте и сейчас 10-20 он думает и потом обновляет, сервис tools.pingdom.com выдал такое Скриншот Так долго он (22 секунды) думает перед тем как выдать ответ, база весит 130 мб, это интернет-магазин, у 12200 товаров много характеристик, которых он видно долго ищет в базе, на сайте около 13000 страниц, стили фото и скрипты грузятся за 2 секунды.

Пробовал другой сайт закинуть на этот сервер, небольшой, база 20 мб, 50 страниц, тоже wordpress, грузится до 0.5 секунд. Как мне сократить время запросов этих подскажите?

ch33ch ()
Ответ на: комментарий от ch33ch

Запросы в query-advisor и изучай. Для начала, вообще можешь все «оптимизации» fastcgi тем более cache bypass закомментировать и перейти на percona. А потом уже если все также плохо будет, «tune and test every change». Очень возможно что какой-то оптимизацией, ты сделал только хуже.

anonymous_sama ★★★★★ ()

/etc/mysql/mysql.conf.d/mysqld.cnf
max_heap_table_size 96мб
мб

Это копипаста? У тебя там реально русские буквы мб?

и еще:

/etc/mysql/mysql.conf.d/mysqld.cnf

мне не приходилось работать с ubuntu, но разве настройки MySQL не должны быть в /etc/my.cnf?

r0ck3r ★★★★★ ()
Ответ на: комментарий от r0ck3r

Это копипаста? У тебя там реально русские буквы мб?

там значение в байтах, я написал в мегабайтах здесь, чтобы было понятно и читаемо

мне не приходилось работать с ubuntu, но разве настройки MySQL не должны быть в /etc/my.cnf?

По такому адресу нет my.cnf, всё находится в /etc/mysql, их несколько: mysql.cnf в корне, в /etc/mysql/conf.d и в /etc/mysql/mysql.conf.d

ch33ch ()
Ответ на: комментарий от anonymous_sama

Спасибо, увидел, get_posts например 2.2 секунды выполняется, как раз получает все товары, get_filtered_price 1.8 сек, только что делать с ними я не знаю пока. Отключил один запрос count, подсчета товаров, время загрузки с 22 сек до 6 упало. Попробую убрать еще сортировку.

Поставил временные таблицы 100 мб, max-join-size 1000000, innodb-log-file-size до 128 мб, убрал fastcgi_cache_bypass и грузится стал до 2.5 сек в среднем. Включил query-cache, но не вижу помогает он мне или нет, с ним дольше мне кажется.

Запросы выполняет плагин, только видимо отключив что-то, или как мне предложили, сделать индексацию по ключу связи можно ускорить запросы, но ума у меня на это не хватит

ch33ch ()
Ответ на: комментарий от ch33ch

Имеется виртуальный сервер

Основная проблема думаю в этом, т.к. хостер может зажать тебе iops.
Где хостишься ?

Deleted ()
Ответ на: комментарий от ch33ch

Ты не то оптимизируешь. Оставь настройки сервера в покое.

Попробуй сначала найти медленные запросы (slow_query_log) и уже работай с ними, вместо настроек mysql, тебе скорее всего нужно будет создать несколько индексов в БД и все заработает.

BaBL ★★★★★ ()
Ответ на: комментарий от BaBL

создать несколько индексов в БД и все заработает

Вот тут у меня знаний нет как это делать.

Про медленные запросы, да, буду смотреть. Трогать nginx и mysql не буду, мне лишь интересно нет ли чего лишнего и совсем неверного в том, что сделано, т.к. всё бралось с нескольких источников

ch33ch ()
Ответ на: комментарий от ch33ch

Про медленные запросы, да, буду смотреть. Трогать nginx и mysql не буду, мне лишь интересно нет ли чего лишнего и совсем неверного в том, что сделано, т.к. всё бралось с нескольких источников

это тебе никто не скажет, параметров много и нужно смотреть как они работают вместе на конкретном железе.

BaBL ★★★★★ ()
Ответ на: комментарий от ch33ch

Очень медленно, возможно нужно где надо прописать индексы

ism ★★★ ()
Ответ на: комментарий от ch33ch

Не на размер надо смотреть, а на структуру и профиль нагрузки. Очень может быть, что тебе хватит innodb_buffer_pool размером чуть больше самой БД и просто прогреть ее, чтобы она вся улеглась в памяти. Ну и делай индексы.

leave ★★★★★ ()
Ответ на: комментарий от ch33ch

А модуль самописный? Если нет, стоит погуглить по поводу аналогичных проблем у других пользователей модуля, вполне может найтись решение. Моё скромное мнение - дело не в mysql и тем более не в веб-сервере, дело в неправильно составленном запросе/ах и или неоправданно большом их количестве.

ddidwyll ★★★ ()
Ответ на: комментарий от ddidwyll

Модуль скачанный, из всех испробованных работает лучше, для 12000 товаров на woocommerce самый оптимальный.

До этого я не туда смотрел, хорошо, что направили. При обычной загрузке страницы магазина идут 4 запроса slow на 0,2815 1,2083 1,2144 и 1,2533 сек, то есть 4 секунды, причем по 2 раза одни и те же.

Раньше работало более менее, когда PHP был в режиме Apache+fastcgi и стояла 14 Убунта, потом начались тормоза, думал поставлю Mysql 5.7 и PHP7 в режиме FastCGI (Nginx + PHP-FPM), как-то это дело исправит, т.к. по тестам заметна разница, эту разницу я заметил на всех сайтах кроме этого.

Буду думать как индексы делать эти и с фильтром поработаю.

ch33ch ()
Ответ на: комментарий от ch33ch

Буду думать как индексы делать эти и с фильтром поработаю.

Запросы какие к базе? какая структура таблиц? По каким полям идёт поиск/сортировка?

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master

Запросов очень много при простой загрузке страницы. Вот те которые slow (до 0,05) общей длительностью 4 сек

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts 
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE 1=1 
AND ( ( wp_postmeta.meta_key = '_visibility'
AND wp_postmeta.meta_value IN ('visible','catalog') ) )
AND wp_posts.post_type = 'product'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC
LIMIT 0, 21
SELECT min( CAST( price_meta.meta_value AS UNSIGNED ) ) as min_price, max( CAST( price_meta.meta_value AS UNSIGNED ) ) as max_price
FROM wp_posts 
LEFT JOIN wp_postmeta as price_meta
ON wp_posts.ID = price_meta.post_id 
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE wp_posts.post_type = 'product' 
AND wp_posts.post_status = 'publish' 
AND price_meta.meta_key IN ('_price') 
AND price_meta.meta_value > '' 
AND ( ( wp_postmeta.meta_key = '_visibility'
AND wp_postmeta.meta_value IN ('visible','catalog') ) )
SELECT min( CAST( price_meta.meta_value AS UNSIGNED ) ) as min_price, max( CAST( price_meta.meta_value AS UNSIGNED ) ) as max_price
FROM wp_posts 
LEFT JOIN wp_postmeta as price_meta
ON wp_posts.ID = price_meta.post_id 
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE wp_posts.post_type = 'product' 
AND wp_posts.post_status = 'publish' 
AND price_meta.meta_key IN ('_price') 
AND price_meta.meta_value > '' 
AND ( ( wp_postmeta.meta_key = '_visibility'
AND wp_postmeta.meta_value IN ('visible','catalog') ) )
SELECT wp_posts.ID
FROM wp_posts 
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id ) 
INNER JOIN wp_postmeta AS mt1
ON ( wp_posts.ID = mt1.post_id )
WHERE 1=1 
AND wp_posts.post_parent = 0 
AND ( ( wp_postmeta.meta_key = '_visibility'
AND wp_postmeta.meta_value IN ('visible','catalog') ) 
AND ( mt1.meta_key = '_price'
AND CAST(mt1.meta_value AS DECIMAL) > '0' ) )
AND wp_posts.post_type = 'product'
AND ((wp_posts.post_status = 'publish'))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5

По структуре информация скудная, 2 таблицы:

wp_posts в ней тип записи product

wp_postmeta содержит мета информацию о product а именно product_cat и product_tag

ch33ch ()
Ответ на: комментарий от ch33ch

Проверь наличие индексов у всего, что есть в where, inner join on, group by и order by

AND CAST(mt1.meta_value AS DECIMAL) > '0' ) )
Вот это можешь не проверять, всё равно sql через жопу сделан.

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master

Там не только inner но и left замечен

anc ★★★★★ ()
Ответ на: комментарий от ddidwyll

Скажите, а использование Percona или MariaDB вместо MySQL изменит как нибудь ситуацию? Может эти запросы будут быстрее обрабатываться... (спросил потому, что не знаю)

ch33ch ()
Ответ на: комментарий от ch33ch

Скажите, а использование Percona или MariaDB вместо MySQL изменит как нибудь ситуацию? Может эти запросы будут быстрее обрабатываться... (спросил потому, что не знаю)

Скажите, если я еду по болоту с трясиной, глубиной 10 метров, замена 92 бензина на 95 бензин исправит ситуацию? Я слышал что с ним лучше и он дороже.

BaBL ★★★★★ ()
Ответ на: комментарий от ch33ch

Абсолютно нет. Причина тормозов - абсолютное незнание проектирования баз данных. Запросы у тебя жирные и данные можно нормализовать изменив схему бд. Ну т.к., как я понимаю, это невозможно, ибо это wordpress, тебе нужно взять посмотреть все медленные запросы и как сказали выше - построить индексы.

Например точно надо построить индексы по этим столбцам:

wp_posts.post_parent
wp_postmeta.meta_key
wp_postmeta.meta_value
wp_posts.post_type
wp_posts.post_status
ORDER BY wp_posts.post_date DESC - если бы говняный мускул умел бы asc desc индексы, идеально бы пригодилось, но, увы.
Должно полегчать на порядки. Но и стоимость insert увеличиться. К слову, по foreign и primary key строить индексы не надо, они и так индексы.

nikolnik ★★★ ()
Ответ на: комментарий от ch33ch

Координационно нет, но частично вполне. Percona особенно хороша в средах с малом количестве памяти. Как пример на vps c 512мб при небольшой тестовой нагрузке c mysql oom_killer приходил каждые три дня, а с percona он не приходил совсем, впрочем это было давно, сейчас в mysql кое-что из percona утащили. Ну и с репозиторием percona гораздо проще использовать последние версии mysql. Потом Percona c дефолтными настройками намного лучше чем mysql с дефолтной конфигурацией.

overall possible memory usage with other process exceeded memory

Включи zram, проверь и настрой vm.swappiness и vm.nr_hugepages. Что там мало ram при таком процессоре? swap какого размера?
Я первый раз увидел, что у тебя 16гб памяти почему-то, наверно о чем-то еще думал. А у тебя 1гб оказывается. У тебя скорей всего все просто в память упирается, даже долго думать не надо. Ну и wp и кривые плагины это вообще бесконечное поле для оптимизации, в котором невозможно выиграть без отказа от wp, или если генерить и отдавать все статикой, но это уже на wp тогда получится.

anonymous_sama ★★★★★ ()
Ответ на: комментарий от nikolnik

К слову, по foreign и primary key строить индексы не надо, они и так индексы.

Все зависит от версии и bd, по foreign с большей долей вероятности надо. Вроде как на последних уже создается сам, но я могу ошибаться.

anc ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.