调整性能 nginx php-fpm mysql

调整性能 nginx php-fpm mysql

我在具有 8 核和 16G RAM 的虚拟服务器上运行 nginx+php-fpm+mysql。我的应用程序是一个简单的 API 提供程序服务器,它根据请求返回从 mysql 数据库生成的 JSON。数据集非常简单,只有几 kb 大。但是每秒有 1000k 个用户的高负载。简单的请求需要 10 秒!!!.. 这非常长。我猜是 MYSQL 导致响应缓慢。因为我有一个测试数据库 - 对测试数据库的相同请求需要 1sek。也许我需要调整我的 mysql 配置以加快请求速度?我正在使用 mysqli 和 bind 技术通过 php 生成输出,

这是我的配置:

/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

答案1

最可能的原因是您的数据库查询和索引的使用不足。

您应该使用 MySQL 功能检查您的 SQL 查询EXPLAIN,以便了解结果是如何产生的。

如果数据库索引没有什么可改进的,那么您需要考虑使用 PHP 或 Memcache 实现现成数据集的缓存。

答案2

我认为这是一个 I/O 问题。我通过在不同的目录中创建许多相同的 get.php 文件并将请求随机重定向到这些文件来解决这个问题。就像一个循环一样。它很好地改善了这种情况。

问候

相关内容