如何配置php.ini,进行PHP性能调优?

如何进行PHP性能调优?下面本篇文章给大家介绍一些配置php.ini的方法,看看怎样才是PHP性能最大优化?希望对大家有所帮助!

如何进行PHP性能调优?下面本篇文章给大家介绍一些配置php.ini的方法,看看怎样才是PHP性能最大优化?希望对大家有所帮助!

如何配置php.ini,进行PHP性能调优?

php零基础到就业直播视频课:进入学习程序员必备接口测试调试工具:立即使用

用于生产环境中的PHP需要对其进行优化,让PHP自身发挥更好的性能,除了写好PHP代码,还要配置好php.ini。下面我们就从内存、文件上传、会话缓冲输出、真实路径缓存这几个方面讲解php.ini的配置调优。

内存

默认设置

memory_limit = 128M

单个进程可使用的内存最大值,这个值的设定可以从以下几点考虑:

  • 应用的类型。如果是内存集中型应用,可增加该值;

  • 单个 PHP 进程平均消耗的内存,该值可通过多次运行同一个脚本来计算平均值;

  • 能负担多少个 php-fpm 进程;该值等于分配的总内存除以单个 PHP 进程平均消耗的内存

文件上传

默认设置

file_uploads = On
max_file_uploads = 20
upload_max_filesize = 2M
max_execution_time = 30 值 为 0 代表没有限制

  • 设置max_file_uploads来决定同时允许多少个文件上传;

  • 设置upload_max_filesize来决定每个文件上传的最大值;

  • 如果是长时间任务,尽量使用队列来处理,因此,可适当缩短max_execution_time的值;

注意, Web 服务器也可以设置文件上传大小及超时时间,不能仅仅以 php.ini 的设置为准;

会话

PHP 的会话默认是保存在硬盘中

session.save_handler = files

在实际应用中,应当将会话保存在内存中。可使用 Memcached 或者 Redis。这样做主要有两个好处:

  • 提高速度;

  • 有助于后期的扩展,如果会话数据存储在硬盘中,不便于增加额外的服务器,如果把会话数据存放在 Memcached 或 Redis 里,任何一台分布式 PHP-FPM 服务器都能访问会话数据。

可通过 PECL 安装memcached扩展并设置默认的save_handler为memcached

session.save_handler = ;memcached;
session.save_path = ;127.0.0.1:11211;

缓冲输出

默认值

output_buffering = 4096

在较少的片段中把内容传递给访问者的浏览器,能减少 HTTP 请求总数。因此,我们要让 PHP 缓冲输出,默认情况下,PHP 已经启用了输出缓冲功能,PHP 缓冲 4096 字节的输出之后才会把内容发送给 Web 服务器。

注:如果想要修改输出缓冲区的大小,确保使用的值是 4(32 位系统)或 8(64 位系统)的倍数。

真实路径缓存

默认值

realpath_cache_size = 4M
realpath_cache_ttl = 120

PHP 会缓存应用使用的文件路径,这样每次包含或导入文件时就无需不断搜索包含路径了,这个缓存叫真实路径缓存(realpath cache),如果运行的是大型的 PHP 文件(如 Composer 组件),使用了大量文件,增加 PHP 真实路径缓存的大小能得到更好的性能。

面试官:列举几种PHP拓展的实现手段及其性能比较?

转载2022-03-28 14:00:024068 + php学习QQ群:609135716关于 PHP 扩展的几种实现手段

1.php 原生扩展开发 c 语言,注:【ext_skel.php】脚本创建

2.zephir

3.php-cpp

4.php-x

5.cgo

  • 封装 zendapi 模式

  • CGO 嵌套 C 和 GO 代码,用 GO 去编译了 php 扩展骨架和 GO 的具体实现

等。。。不限上面几种方式。

围绕【zephir,cgo,PHP 开启 JIT】4 种模式下,通过斐波那契数列计算性能,来查看运行效果。

zephir 代码生成扩展

//Main 类
final class Zimuge
{
public static function calcFibonacci(int i){
if (i < 2) {
return i;
}
return self::calcFibonacci(i – 1) + self::calcFibonacci(i – 2);
}编译安装
zephir build

cgo 代码生成扩展

package main
/*
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
static int le_go2php;
PHP_MINIT_FUNCTION(go2php)
{
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(go2php)
{
return SUCCESS;
}
PHP_RINIT_FUNCTION(go2php)
{
return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(go2php)
{
return SUCCESS;
}
PHP_MINFO_FUNCTION(go2php)
{
php_info_print_table_start();
php_info_print_table_header(2, "go2php support", "enabled");
php_info_print_table_end();
}
PHP_FUNCTION(go2php_print)
{
zend_long a,b;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_LONG(a)
ZEND_PARSE_PARAMETERS_END();
b = calcFib(a);
RETURN_LONG(b);
}
ZEND_BEGIN_ARG_INFO(null, 0)
ZEND_END_ARG_INFO()
const zend_function_entry go2php_functions[] = {
PHP_FE(go2php_print, null)
PHP_FE_END
};
zend_module_entry go2php_module_entry = {
STANDARD_MODULE_HEADER,
"go2php",
go2php_functions,
PHP_MINIT(go2php),
PHP_MSHUTDOWN(go2php),
PHP_RINIT(go2php),
PHP_RSHUTDOWN(go2php),
PHP_MINFO(go2php),
"0.1.0",
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_GO2PHP
ZEND_GET_MODULE(go2php)
#endif
*/
import "C"
func main() {}package main
import "C"
//export calcFib
func calcFib(i int) int {
if i < 2 {
return i
}
return calcFib(i-1)+calcFib(i-2)
}

编译&链接

CGO_CFLAGS="-g \\
-I`/root/download/php8/bin/php-config –include-dir` \\
-I`/root/download/php8/bin/php-config –include-dir`/main \\
-I`/root/download/php8/bin/php-config –include-dir`/TSRM \\
-I`/root/download/php8/bin/php-config –include-dir`/Zend \\
-I`/root/download/php8/bin/php-config –include-dir`/ext \\
-I`/root/download/php8/bin/php-config –include-dir`/ext/date/lib \\
-DHAVE_CONFIG_H" CGO_LDFLAGS="-Wl,–export-dynamic -Wl,–unresolved-symbols=ignore-all" go build -p 1 -gcflags "-l" -buildmode=c-shared -o go2php.so

测试用 php 脚本代码

<?php
const COUNT = 30;
function calcFibonacci(int $i): int {
if ($i < 2) {
return $i;
}
return calcFibonacci($i – 1) + calcFibonacci($i – 2);
}
// CGO 速度
$startTime = microtime(true);
for($i = 1; $i <= COUNT; $i++) {
if($i != COUNT) {
go2php_print($i);
}else {
echo go2php_print($i)."\\n";
}
}
$time = microtime(true) – $startTime;
echo "CGO: {$time} 秒\\n";
//zephir 速度
$startTime = microtime(true);
for($i = 1; $i <= COUNT; $i++) {
if($i != COUNT) {
Lsz\\Zimuge::calcFibonacci($i);
}else {
echo Lsz\\Zimuge::calcFibonacci($i)."\\n";
}
}
$time = microtime(true) – $startTime;
echo "zephir: {$time} 秒\\n";
// PHP JIT 速度
$startTime = microtime(true);
for($i = 1; $i <= COUNT; $i++) {
if($i != COUNT) {
calcFibonacci($i);
}else {
echo calcFibonacci($i)."\\n";
}
}
$time = microtime(true) – $startTime;
echo "PHP: {$time} 秒\\n";

不使用 PHP JIT 的情况下测试

php test.php
->执行结果取一个平均
832040
CGO: 0.059875011444092 秒
832040
zephir: 8.5679790973663 秒
832040
PHP: 0.75995492935181 秒

使用 PHP JIT 的情况下测试

php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M test.php
->执行结果取一个平均
832040
CGO: 0.046900987625122 秒
832040
zephir: 5.5882248878479 秒
832040
PHP: 0.10621190071106 秒

cgo 和 zephir 编译后的 so文件,通过php.ini 引入进来

执行测试脚本需要保证so正确读取进来。

命令 php -m 或者 php –ri xx.so 进行确认。

[PHP Modules]
Core
ctype
curl
date
dom
FFI
fileinfo
filter
gd
go2php
hash
iconv
json
libxml
lsz
mbstring
mysqlnd
openssl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
redis
Reflection
session
SimpleXML
SPL
sqlite3
standard
swoole
tokenizer
xml
xmlreader
xmlwriter
yaf
Zend OPcache
zephir_parser
zimuge
[Zend Modules]
Zend OPcache

使用PHP版本

php -v
PHP 8.1.3 (cli) (built: Feb 27 2022 19:40:08) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies
with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies

结论:

JIT 能提高 php 的性能。

想学习 go 又不想放弃 php 可以用玩下 CGO。

zephir 虽然计算性能不太好,但是写 PHP 扩展实现起来比较简单。

以上就是面试官:列举几种PHP拓展的实现手段及其性能比较?的详细内容,更多请关注钦钦技术栈其它相关文章!

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/24418/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月21日 下午3:01
下一篇 2022年9月21日 下午3:01
软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!