在Ubuntu系统中,优化PHP-FPM与数据库的连接可以通过以下几个方面来实现:
在PHP代码中,使用持久连接可以减少与数据库建立和关闭连接的开销。在PDO连接字符串中添加pdo_mysql.persistent=true
参数,或者在mysqli扩展中使用p:
前缀。
例如,使用PDO:
$dsn = 'mysql:host=localhost;dbname=mydb;charset=utf8mb4';
$username = 'username';
$password = 'password';
$options = [
PDO::ATTR_PERSISTENT => true,
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
使用mysqli:
$mysqli = new mysqli('p:localhost', 'username', 'password', 'mydb');
if ($mysqli->connect_error) {
echo 'Connection failed: ' . $mysqli->connect_error;
}
编辑/etc/php/7.x/fpm/pool.d/www.conf
文件,调整以下参数:
pm.max_children
:设置最大子进程数,根据服务器的内存和应用程序的需求进行调整。pm.start_servers
:设置启动时的服务器进程数,可以根据服务器的负载进行调整。pm.min_spare_servers
和 pm.max_spare_servers
:设置空闲进程的最小和最大数量,可以根据服务器的负载进行调整。例如:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
编辑/etc/mysql/my.cnf
文件,调整以下参数:
max_connections
:设置允许的最大并发连接数,根据服务器的内存和应用程序的需求进行调整。wait_timeout
和 interactive_timeout
:设置连接的超时时间,以减少空闲连接的数量。例如:
[mysqld]
max_connections = 300
wait_timeout = 60
interactive_timeout = 60
可以考虑使用连接池来管理数据库连接,例如使用php-mysqlnd-ms
扩展。连接池可以在应用程序启动时创建一定数量的数据库连接,并在需要时分配给应用程序使用,从而减少连接的创建和关闭开销。
优化数据库查询,避免使用大量的JOIN操作、子查询和临时表,尽量使用索引来提高查询性能。
通过以上方法,可以在Ubuntu系统中优化PHP-FPM与数据库的连接,提高应用程序的性能。