linux – 在EC2上从PHP到MySQL的连接时间很长

前端之家收集整理的这篇文章主要介绍了linux – 在EC2上从PHP到MySQL的连接时间很长前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用InnoDB连接到数据库从站时出现间歇性问题.间歇性地我连接时间超过2秒.这些服务器托管在亚马逊的EC2上.

应用服务器是在Ubuntu上运行的PHP 5.2 / Apache. DB slave在Ubuntu 9.10上运行Percona的XtraDB 5.1.它使用EBS Raid阵列进行数据存储.

我们已经使用skip name resolve并绑定到地址0.0.0.0.

这是PHP代码的存根失败

        $tmp = MysqLi_init();
        $start_time = microtime(true);
        $tmp->options(MysqLI_OPT_CONNECT_TIMEOUT,2);
        $tmp->real_connect($DB_SERVERS[$server]['server'],$DB_SERVERS[$server]['username'],$DB_SERVERS[$server]['password'],$DB_SERVERS[$server]['schema'],$DB_SERVERS[$server]['port']);
        if(MysqLi_connect_errno()){
            $timer = microtime(true) - $start_time;
            mail($errors_to,'DB connection error',$timer);
        }

数据库服务器上有超过300Mb用于新连接,服务器远不及最大允许值(1,200中的60个).在两台服务器上加载< 2个核心m1.xlarge实例上的2个. 来自MysqL配置的一些亮点

max_connections = 1200

thread_stack = 512K
thread_cache_size = 1024
thread_concurrency = 16

innodb-file-per-table
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 13G

任何有关追踪减速来源的帮助都表示赞赏.

[编辑]我一直在更新网络的sysctl值,但他们似乎没有解决问题.我对数据库和应用程序服务器进行了以下调整.

net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_fin_timeout = 20
net.ipv4.tcp_keepalive_time = 180
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.tcp_synack_retries = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 87380 16777216

[编辑]根据jaimieb的建议,我添加了一些跟踪并使用时间捕获了以下数据.此服务器在一天的这个时间处理大约51个查询/秒.在下面概述的3分钟窗口期间,连接错误被提升一次(在13:06:36).由于有1次失败和大约9,200次成功连接,我认为这不会产生任何有意义的报告.

脚本:

date >> /root/database_server.txt
(time MysqL -h database_Server -D schema_name -u appuser -p apppassword -e '') > /dev/null 2>> /root/database_server.txt

结果:


=== Application Server 1 ===
Mon Feb 22 13:05:01 EST 2010
real    0m0.008s
user    0m0.001s
sys     0m0.000s

Mon Feb 22 13:06:01 EST 2010
real    0m0.007s
user    0m0.002s
sys     0m0.000s

Mon Feb 22 13:07:01 EST 2010
real    0m0.008s
user    0m0.000s
sys     0m0.001s

=== Application Server 2 ===
Mon Feb 22 13:05:01 EST 2010
real    0m0.009s
user    0m0.000s
sys     0m0.002s

Mon Feb 22 13:06:01 EST 2010
real    0m0.009s
user    0m0.001s
sys     0m0.003s

Mon Feb 22 13:07:01 EST 2010
real    0m0.008s
user    0m0.000s
sys     0m0.001s

=== Database Server ===
Mon Feb 22 13:05:01 EST 2010
real    0m0.016s
user    0m0.000s
sys     0m0.010s

Mon Feb 22 13:06:01 EST 2010
real    0m0.006s
user    0m0.010s
sys     0m0.000s

Mon Feb 22 13:07:01 EST 2010
real    0m0.016s
user    0m0.000s
sys     0m0.010s

[编辑]根据LinkedIn问题收到的建议,我尝试将back_log值设置得更高.我们一直在运行默认值(50)并将其增加到150.我们还在应用程序和数据库服务器上将内核值/ proc / sys / net / core / somaxconn(最大套接字连接)从默认值128提高到256我们确实看到了处理器利用率的一些提升,但仍然收到连接超时.

解决方法

如果从等式中消除PHP,它的效果如何?使用CLI MysqL客户端连接到服务器.从数据库服务器本身和应用服务器尝试:
time MysqL -h localhost -D dbname -u username -ppassword -e ''
原文链接:https://www.f2er.com/linux/398483.html

猜你在找的Linux相关文章