tune up desempenho nginx php-fpm mysql

1

Estou executando um nginx + php-fpm + mysql no servidor virtual com 8 núcleos e 16G ram Minha aplicação é um simples servidor de provedor de API, que retorna JSONs gerados a partir do banco de dados mysql em pedidos. Os conjuntos de dados são simples e apenas alguns kb grandes. Mas com uma alta carga de 1000k usuários por segundo. os pedidos simples levam 10 sekonds !!! .. o que é muito longo. Eu assumo o seu MYSQL que faz com que as respostas sejam lentas. Porque eu tenho um banco de dados de teste - mesmo pedido para o banco de dados de teste leva 1sek. Pode ser que eu preciso ajustar minha configuração do mysql para fazer solicitações mais rapidamente? Estou usando o mysqli e bind técnica para gerar saída com php,

aqui estão minhas configurações:

/etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user              nginx;
worker_processes  8;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;


events {
  worker_connections 15000;
  multi_accept on;
  use epoll;
}


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  0;
    keepalive_timeout  100;

    #gzip  on;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

}

/etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql
# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
    
por user1908375 13.06.2014 / 23:23

2 respostas

0

Provavelmente o culpado são suas consultas ao banco de dados e o uso insuficiente de índices.

Você deve verificar suas consultas SQL com o recurso MySQL EXPLAIN , para que você possa ver como os resultados são produzidos.

Se não houver nada para melhorar nos índices do banco de dados, é necessário considerar a implementação do armazenamento em cache de conjuntos de dados prontos usando o PHP ou o Memcache.

    
por 14.06.2014 / 16:14
0

Eu suponho que foi um problema de I / O.Eu resolvi com muitos dos mesmos arquivos get.php em diretórios diferentes e redirecionando solicitações aleatoriamente para eles .. como um round robin. Melhorou muito bem a situação.

Atenciosamente

    
por 27.06.2014 / 19:01