centos8安装PHP8/7.4安装笔记

《centos8安装PHP8/7.4安装笔记》

PHP是PHP Hypertext Preprocessor的递归首字母缩写,是一种流行的服务器端脚本语言,用于Web开发以创建强大而动态的网站。

添加EPEL和Remi存储库

//首先,您需要添加EPEL&Remi存储库,从中可以在CentOS 8 Linux上安装PHP 7.4。
//要在CentOS 8上安装并启用EPEL存储库,请执行以下dnf命令。
# dnf install https://dl.Fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
//要确认EPEL存储库的存在,请运行以下rpm命令。
# rpm -qa | grep epel

//接下来,运行以下命令以添加Remi存储库。
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
//再次,以验证Remi存储库的存在,运行命令。
# rpm -qa | grep remi

成功添加EPEL和Remi存储库后,执行以下命令以获取可用PHP模块流的列表。

# dnf module list php 
《centos8安装PHP8/7.4安装笔记》

从上面的输出中,remi-7.4 是最新的PHP流,因此我们将启用模块流

# dnf module enable php:remi-7.4 
//再次查看模块流的列表 
# dnf module list php 
《centos8安装PHP8/7.4安装笔记》

取消旧模块的选择:dnf module reset php

安装PHP remi-8.0模块

# dnf module list php
# dnf module reset   //取消旧模块的选择
# dnf module enable php:remi-8.0 
# dnf module install php:remi-8.0

安装 PHP remi-8.0模块后,即可使用以下命令继续并安装PHP。 这还将安装许多其他软件包,例如Apache和Nginx模块。

# dnf install php php-common php-opcache php-mysqlnd php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel php-cli php-fpm php-redis php-pgsql php-zip php-zlib php-pecl-zip  
//如果上面报错执行下面这句
//可能是某些模块已经安装
# dnf install php-opcache php-mysqlnd php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel php-fpm php-redis php-zip php-zlib php-pecl-zip 

为php创建session时的指令 添加nginx权限

//首先检查 vi /etc/php.ini
//查看里面session.save_path = "/tmp"是否注释掉,如果是去掉,开启。 !!!
# chown root.nginx /var/lib/php/session

为php-fpm 添加用户权限

# vi /etc/php-fpm.d/www.conf
将
user = apache 改为 user = nginx
group = apache 改为 group =nginx

//  /etc/php.d为模块配置目录
10-opcache.ini   20-exif.ini      20-json.ini      20-phar.ini       20-sysvsem.ini    30-mysqli.ini      40-igbinary.ini
 20-bcmath.ini    20-fileinfo.ini  20-ldap.ini      20-posix.ini      20-sysvshm.ini    30-pdo_mysql.ini   40-msgpack.ini
 20-bz2.ini       20-ftp.ini       20-mbstring.ini  20-shmop.ini      20-tokenizer.ini  30-pdo_odbc.ini    40-zip.ini
 20-calendar.ini  20-gd.ini        20-mysqlnd.ini   20-simplexml.ini  20-xml.ini        30-pdo_pgsql.ini   50-redis.ini
 20-ctype.ini     20-gettext.ini   20-odbc.ini      20-sockets.ini    20-xmlwriter.ini  30-pdo_sqlite.ini  opcache-default.blacklist
 20-curl.ini      20-iconv.ini     20-pdo.ini       20-sqlite3.ini    20-xsl.ini        30-xmlreader.ini
 20-dom.ini       20-imap.ini      20-pgsql.ini     20-sysvmsg.ini    30-mcrypt.ini     30-xmlrpc.ini
listen = 127.0.0.1:9001 <<<<<<<修改为 listen 127.0.0.1:9001 或其他端口
//listen = /tmp/php56.sock //或监听sock 二选一 推荐监听端口的
//listen = /var/run/php56-cgi.sock

服务器相关的命令

# service php-fpm restart 重启
# service nginx restart
# systemctl enable php-fpm.service 开机启动

php-pool进程池优化

php-fpm进程池开启进程有两种方式:
一种是:static (静态的), 直接开启指定数量的php-fpm进程,不再增加或者减少
一种是:dynamic (动态的), 开始时开启一定数量的php-fpm进程, 当请求量变大时,动态的增加php-fpm进程数达到上限, 当空闲时自动释放空闲的进程数到一个下限。
(生产环境中,根据服务器实际需求来进行调整)

要用到的一些参数 ,分别是 pm,pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers

pm表示使用哪种方式,有两个值可以选择。staic或者dynamic
例:pm = dynamic

pm.max_children:静态方式下指开启的php-fpm进程数量, 在动态方式下限定php-fpm的最大进程数。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量。ps:spare(空闲的)
pm.max_spare_servers:动态方式下空闲状态的最大php-fpm进程数量。


如果pm设置为staic,那么只有pm.max_childern这个参数生效
如果pm设置为dynamic,4个参数都生效。系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
PS:要求pm.start_servers的值在pm.min_spare_servers和pm.max_spare_servers之间

假设网站每秒钟有5个用户访问,最高同时在线,请求或翻页等操作 , 8倍: 5*8=40
---------------------------------------------------------
pm = dynamic (默认)
pm.max_children = 50  ->50  动态方式最大进程数
pm.start_servers = 5  ->8  动态方式下的起始进程数量
pm.min_spare_servers = 5  ->8  动态方式空闲最小进程数量
pm.max_spare_servers = 35  ->50  动态方式下空闲状态的最大进程数量

如果长时间没有得到处理的请求就会出现 504 Gateway Time-out 这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现 502 Bad gateway 这个错误。

max_children较好的设置方式根据req/s(吞吐率,单位时间里服务器处理的最大请求数,单位req/s)来设置,若程序是 100 req/s 的处理能力,那么就设置 100比较好,这是动态来调整的。

//图片服务器的配置
pm.max_children = 50  ->150  动态方式最大进程数
pm.start_servers = 5  ->20  动态方式下的起始进程数量
pm.min_spare_servers = 5  ->20  动态方式空闲最小进程数量
pm.max_spare_servers = 35  ->135  动态方式下空闲状态的最大进程数量

//web
pm = dynamic
;静态方式下开启的php-fpm进程数量。静态下有效
pm.max_children = 140
;动态方式下开启的php-fpm进程数量。动态下有效
pm.start_servers = 130
pm.min_spare_servers = 120
pm.max_spare_servers = 140
;空闲多少秒之后进程会被kill,默认为10s
pm.process_idle_timeout = 4s;
;每个worker在8次任务后被杀死, 可获得大量内存!!! worker不需要长期驻留!!
pm.max_requests = 2

开启cgi (非必要)

编辑文件vi /etc/php.ini,找到并开启cgi.fix_pathinfo = 1 保存

开启php-opcache(非必要)

# vi /etc/php.d/10-opcache.ini
 php-opcache : Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销
 ;zend_extension=opcache.so
 ;[opcache]
 ;opcache.enable=1
 ;opcache.enable_cli=1
 ;opcache.memory_consumption=128
 ;opcache.interned_strings_buffer=8
 ;opcache.max_accelerated_files=4000
 ;opcache.revalidate_freq=60
 ;opcache.fast_shutdown=1
;开启opcache
opcache.enable=1 
;CLI环境下,PHP启用OPcache
opcache.enable_cli=1
;OPcache共享内存存储大小,单位MB
opcache.memory_consumption=128

其他

;PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了1000次字符串“foobar”,在PHP内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的999次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次——默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。
这个选项的值是以兆字节(megabytes)作为单位,如果把它设置为16,则表示16MB,默认是4MB
opcache.interned_strings_buffer=8

;这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和。
设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。也就是说在200到1000000之间。
opcache.max_accelerated_files=4000

;设置缓存的过期时间(单位是秒),为0的话每次都要检查
opcache.revalidate_freq=60

;从字面上理解就是“允许更快速关闭”。它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器,从而加快PHP的响应速度和PHP进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为1就可以使用这个机制了。
opcache.fast_shutdown=1

;如果启用(设置为1),OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。
如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果
强烈建议你在生产环境中设置为0,更新代码后,再平滑重启PHP和web服务器。
opcache.validate_timestamps=0 

;开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.
这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.
opcache.file_cache=/tmp
点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注