開啟Opcache不開啟JIT情況下:1.419s
開啟Opcache且開啟JIT情況下:0.155s
開啟JIT情況下是不開啟JIT情況下的接近9.15倍,多次測(cè)試這個(gè)值穩(wěn)定在8倍到10倍之間。
MPF表現(xiàn)如何?
為了接近我們的業(yè)務(wù),所以在mpf框架下進(jìn)行測(cè)試
環(huán)境
aliyun centos 6.9
php7.test.com php-fpm一個(gè)進(jìn)程
php8.test.com php-fpm一個(gè)進(jìn)程
Mpf兩個(gè)接口
/v1/hello/wzh/index1
public function index1() { $this->output('123');
}
/v1/hello/wzh/index2
public function index2() {
$a = 0; for ($i = 0; $i < 1000000; $i )
$a ; $this->output($a);
}
我們壓測(cè)一下
php7 計(jì)算少情況
wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index1
Running 5s test @ https://php7.test.com/v1/hello/wzh/index1
12 threads and 36 connections
Thread Stats Avg Stdev Max /- Stdev
Latency 432.97ms 76.00ms 527.38ms 92.17%
Req/Sec 8.38 5.36 20.00 63.85%
396 requests in 5.09s, 121.43KB readRequests/sec: 77.78
Transfer/sec: 23.85KB
php7 計(jì)算多情況
wrk -c36 -d 5s -t12 https://php7.test.com/v1/hello/wzh/index2
Running 5s test @ https://php7.test.com/v1/hello/wzh/index2
12 threads and 36 connections
Thread Stats Avg Stdev Max /- Stdev
Latency 1.02s 569.99ms 1.96s 57.14%
Req/Sec 3.18 3.43 10.00 80.88%
70 requests in 5.03s, 21.60KB read
Socket errors: connect 0, read 0, write 0, timeout 42
Requests/sec: 13.91
Transfer/sec: 4.29KB
php8 JIT開啟計(jì)算少情況
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1
Running 5s test @ https://php8.test.com/v1/hello/wzh/index1
12 threads and 36 connections
Thread Stats Avg Stdev Max /- Stdev
Latency 34.48ms 4.34ms 95.45ms 87.87%
Req/Sec 84.61 13.36 121.00 85.28%
5083 requests in 5.03s, 1.67MB readRequests/sec: 1010.55
Transfer/sec: 340.43KB
php8 JIT開啟計(jì)算多情況
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2
Running 5s test @ https://php8.test.com/v1/hello/wzh/index2
12 threads and 36 connections
Thread Stats Avg Stdev Max /- Stdev
Latency 97.84ms 4.97ms 159.50ms 92.12%
Req/Sec 30.27 4.42 50.00 86.50%
1814 requests in 5.07s, 614.71KB readRequests/sec: 357.76
Transfer/sec: 121.23KB
php8 JIT關(guān)閉計(jì)算少情況
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index1
Running 5s test @ https://php8.test.com/v1/hello/wzh/index1
12 threads and 36 connections
Thread Stats Avg Stdev Max /- Stdev
Latency 38.10ms 6.47ms 239.60ms 94.01%
Req/Sec 77.50 12.76 110.00 89.63%
4622 requests in 5.04s, 1.52MB readRequests/sec: 916.22
Transfer/sec: 308.65KB
php8 JIT關(guān)閉計(jì)算多情況
wrk -c36 -d 5s -t12 https://php8.test.com/v1/hello/wzh/index2
Running 5s test @ https://php8.test.com/v1/hello/wzh/index2
12 threads and 36 connections
Thread Stats Avg Stdev Max /- Stdev
Latency 766.16ms 181.30ms 887.08ms 88.37%
Req/Sec 6.25 5.36 20.00 91.36%
215 requests in 5.09s, 72.86KB readRequests/sec: 42.22
Transfer/sec: 14.31KB
[image:BA1A37D8-760E-4637-901B-3E3521F969E7-4107-0000191504DD1B2E/86D37899-3B46-4BDA-B396-E5C8DD51068E.png]
發(fā)現(xiàn)計(jì)算少情況下php8JIT是php7性能的13倍,而且計(jì)算越多優(yōu)化越明顯,計(jì)算多情況下php8JIT是php7性能的25.7倍。
但是有一個(gè)問題我覺得很神奇php8無JIT計(jì)算少的情況居然也優(yōu)化了很多,我以為是測(cè)試方向的問題,但是經(jīng)過多次論證,這個(gè)數(shù)據(jù)是準(zhǔn)確的,有時(shí)間想找一下這里的優(yōu)化點(diǎn)是什么。
編譯過程
吐槽:php手動(dòng)編譯越來越麻煩了,編譯了2個(gè)小時(shí)才編譯完,踩了N個(gè)坑,為了讓大家多寫幾個(gè)需求,把坑分享出來
環(huán)境
aliyun centos 6.9,咱們公司一般都是這個(gè)版本。
php源碼編譯
wget https://downloads.php.net/~carusogabriel/php-8.0.0alpha2.tar.gz tar -zxf php-8.0.0alpha2.tar.gzcd php-8.0.0alpha2 ./configure --prefix=/yourdir/php8 --with-config-file-path=/yourdir/php8/etc --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-static --enable-sockets --with-zip --enable-calendar --enable-bcmath --enable-mbstring --with-zlib --with-iconv=/usr/local/libiconv --enable-gd --enable-mbstring --with-freetype --with-mysql-sock=/tmp/mysql.sock --disable-ipv6 --enable-debug --with-openssl --enable-opcache復(fù)制代碼
這里一般都是makefile生成失敗的,后面有生成失敗的例子,生成成功后
make -j 8 make install cp php.ini-production /yourdir/php8/etc/php.ini
配置php.ini
記住一定要把opcache.ini舊的配置也寫上,JIT說到底還是對(duì)Opcache的優(yōu)化。
zend_extension=opcache.so opcache.enable=1 ; 命令行測(cè)試的話這里一定要打開 opcache.enable_cli=1 opcache.memory_consumption=512 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.validate_timestamps=1 opcache.revalidate_freq=300 opcache.fast_shutdown=1 opcache.enable_file_override = 1 opcache.blacklist_filename = /etc/php.d/opcache.blacklist ; 這里就是新的jit的配置 opcache.jit=1205 opcache.jit_buffer_size=64M
configure失敗解決方法
這里解決./configure 失敗的一些問題
問題一
No package 'sqlite3' found
解決辦法
wget https://www.sqlite.org/2020/sqlite-autoconf-3320300.tar.gz tar -zxf sqlite-autoconf-3320300.tar.gzcd sqlite-autoconf-3320300 ./configure --prefix=/usr/local/lib/sqlite-3.32.0 make CFLAGS="-g -O2 -DSQLITE_ENABLE_COLUMN_METADATA"make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/sqlite-3.32.0/lib/pkgconfig"復(fù)制代碼
注意
直接這樣是不行的,yum倉庫里的版本太低。
yum install sqlite-devel
問題二
configure: error: Please reinstall the iconv library.
解決辦法
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxf libiconv-1.14.tar.gzcd libiconv-1.14 ./configure make make install
問題三
No package 'oniguruma' found
同樣yum也是不行的,版本太低。
yum install oniguruma-devel
解決辦法
wget https://github.com/kkos/oniguruma/archive/v6.9.5_rev1.tar.gz tar -zxf v6.9.5_rev1.tar.gzcd oniguruma-6.9.5_rev1/ autoreconf -vfi ./configure --prefix=/usr/local/lib/oniguruma-6.9.5 make make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/oniguruma-6.9.5/lib/pkgconfig"
問題四
No package 'libzip' found
解決辦法
wget https://libzip.org/download/libzip-1.7.2.tar.gz tar -zxf libzip-1.7.2.tar.gzcd libzip-1.7.2 cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/lib/libzip-1.7.2 make make installexport PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/libzip-1.7.2/lib/pkgconfig"復(fù)制代碼
Enjoy php 8 & JIT !
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問題,請(qǐng)?jiān)L問西部數(shù)碼官網(wǎng):m.ps-sw.cn