Oracle x86_64免费的1C1G VPS是1个CPU双线程:
Bash
$ cat /proc/cpuinfo | grep "processor" | wc -l # 查看逻辑 CPU 数量
2
$ cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l # 查看物理 CPU 数量
1
$ cat /proc/cpuinfo | grep "cpu cores" | uniq # 查看每个物理 CPU 的核心数
cpu cores : 1查看内存占用前10的应用: ps -Ao user,pid,ppid,%mem,rss,%cpu,cmd --sort=-rss|head -n 11
查看nginx、php-fpm、mariadb内存占用
在默认配置下,wordpress https+fastcgi_cache恢复完成+启用swap(vm.swappiness=40)后,有4个nginx进程(1主+2工作+1缓存),4个php-fpm进程(1主+3池)
- nginx工作进程数量,与逻辑CPU数量相同;可以CPU的整数倍数,但不能小于,避免多个核心切换时会带来不必要的开销。
- php-fpm每个池占用内容近70M,也与php扩展安装也有关系,也是要占内存的。
- php-fpm有3个池,是默认为dynamic,开机2个,最大3个
- mariadbd神奇只占35M,在开机时有100M+,但开机时swap使用为0。
Bash
$ ps -Ao user,pid,ppid,%mem,rss,%cpu,cmd --sort=+ppid|grep -E 'PID|nginx|php-fpm|mariadb'
USER PID PPID %MEM RSS %CPU CMD
mysql 90339 1 3.6 36068 0.0 /usr/sbin/mariadbd
root 108561 1 0.8 8252 0.0 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
root 110157 1 3.2 31420 0.0 php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)
www-data 117611 110157 9.2 90756 1.0 php-fpm: pool www
www-data 117822 110157 7.6 75288 0.9 php-fpm: pool www
www-data 117824 110157 8.6 84912 1.0 php-fpm: pool www
www-data 118124 108561 0.9 8904 0.1 nginx: worker process
www-data 118125 108561 0.9 9064 0.0 nginx: worker process
www-data 118126 108561 0.3 3852 0.0 nginx: cache manager process
lat 119296 119289 0.2 2072 0.0 grep --color=auto -E PID|nginx|php-fpm|mariadb内存占用情况:swap在使用中
Bash
$ sudo free -h
total used free shared buff/cache available
Mem: 956Mi 448Mi 128Mi 55Mi 614Mi 508Mi
Swap: 2.0Gi 151Mi 1.9Gi所以,在Oracle x86_64免费的1C1G VPS,且1个CPU是双线程,并不是双核心的;另外网站访问量不高。
- 一个物理核心两个线程是超线程技术模拟的,实际性能提升有限,而且可能会因为上下文切换增加开销。nginx 使用auto会有2个worker_processes,手工直接指定1。
- php-fpm为开机启动1个进程,被请求超过100次自动重启进程,单个请求最大执行35s;php进程内存限制,由默认无限改为在128M。
php.ini 配置
sudo vim /etc/php/8.3/fpm/php.ini
默认值为128M,所以可以不用改。
memory_limit = 128M
Zend OPcache
PHP官方提供的一个字节码缓存的内置扩展,用于优化PHP脚本的执行效率。它通过缓存已编译的操作码(opcode),避免每次请求都重新解析和编译脚本,从而显著提升性能。
OPcache主要有两种缓存方式:SHM(共享内存)缓存和文件缓存。此外,JIT(即时编译)是OPcache的一个特性,用于进一步提高性能。
- SHM Cache(共享内存缓存):
- SHM缓存将编译后的操作码存储在共享内存中,这些内存可以被所有PHP进程访问。这意味着多个PHP进程可以共享相同的操作码缓存,从而减少内存使用并提高性能。
- 在PHP.ini配置中,可以通过
opcache.memory_consumption来设置共享内存的大小。
- File Cache(文件缓存):
- 文件缓存将编译后的操作码存储在文件系统中,而不是共享内存中。这通常用于共享内存不足的情况,或者在某些环境中(如容器化环境)更容易管理。
- 可以通过
opcache.file_cache配置项来设置文件缓存的目录。
- JIT(Just-In-Time Compilation,即时编译):
- JIT是OPcache的一个特性,它可以将PHP操作码动态编译为机器码,然后直接执行机器码,而不是由Zend虚拟机解释执行操作码。这可以显著提高CPU密集型任务的性能。
- JIT在PHP 8.0中引入,并在后续版本中不断改进。在PHP 8.3中,JIT的配置和使用更加成熟。
- JIT的配置主要通过
opcache.jit和opcache.jit_buffer_size等配置项进行。
从 https://blog.t725.cn/phpInfo.php#module_zend+opcache 看,默认是开启的。

php8.3-fpm 池的配置
sudo vim /etc/php/8.3/fpm/pool.d/www.conf
pm = static;
pm.max_children = 1;
pm.max_requests = 100;
request_terminate_timeout = 35;
nginx
sudo vim /etc/nginx/nginx.conf
两个工作进程可以提高访问响应速度,也可以考虑不改。
worker_processes 1/auto;
配置生效
sudo systemctl restart php8.3-fpm
sudo nginx -t && sudo nginx -s reload
发表回复