站内公告:

我们的虚拟社区正式开通了

Main Menu

最新帖子

#11
Linux 系统 / Linux 环境下 NFS 服务安装及配置
上次发布者 virtual - 2023-1月-06 02:29 下午
服务端:

确认是否安装
rpm -qa nfs-utils rpcbind

安装:
yum install -y nfs-utils rpcbind

服务端开机启动
systemctl start rpcbind
systemctl enable rpcbind
 
systemctl start nfs-server
systemctl enable nfs-server

配置

vim /etc/exports
 /mnt/share 172.18.0.0/16(rw,sync,insecure,no_subtree_check,no_root_squash)

常用选项:

  • rw 表示允许读写
  • ro 表示为只读
  • sync 表示同步写入到内存与硬盘中
  • no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash),如果不加那么客户端无法在里面编辑或写入文件,因为默认以nfsnobody的权限
  • root_squash 表示客户机用root用户访问该共享目录时,将root用户映射成匿名用户
  • 其它常用选项:
  • all_squash 所有访问用户都映射为匿名用户或用户组
  • async 将数据先保存在内存缓冲区中,必要时才写入磁盘,速度快但会丢失数据
  • subtree_check(默认) 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
  • no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
举例:
其中客户机地址可以是主机名 ID 地址、网段地址,允许使用 "*" "?" 通配符;权限选项中的 rw 表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以 root 身份访问时赋予本地 root 权限(默认是root_squash,将为 nfsnobody 用户降权对待)。

当需要将同一个目录共享给不同的客户机,且分配不同的权限时,只要以空格隔指定多个"客户机(权限选项)"即可。
例如,以下操作将 /var/ftp/public 目录共享给两个客户机,并分别给予只读、读写权限。


#启动服务 
service rpcbind start
 
sudo service nfs-server restart
sudo service nfs-server status

查看:
rpcinfo -p localhost
 
showmount -e 10.xx.xx.xx

# 客户端
yum install -y nfs-utils
showmount -e 172.18.0.13
mkdir -p /mnt/share
mount 172.18.0.13:/mnt/share /mnt/share -o proto=tcp -o nolock
df -h | grep 172.18.0.13

udp:

mount 172.18.0.13:/mnt/share /mnt/share
umount /mnt/share

fstab自动挂载设置
修改 /etc/fstab 配置文件,加入 NFS 共享目录的挂载设置(文件系统类型为nfs)。
挂载参数建议添加_netdev(设备需要网络)
若添加 soft、intr 参数可以实现软挂载,允许在网络中断时放弃挂载。这样客户机就可以在每次开机后自动挂载 NFS 共享资源了。

vim /etc/fstab

192.168.109.11:/opt/web /var/www/html           nfs     default,_netdev 0 0


#12
python更改下载源地址
python默认的pip源在国外,如果下载比较大的第三方库时可能会非常非常慢,甚至会报错,所以为了有一个更加友好的python使用体验,建议为python的pip换一下源。

临时使用pip源

在使用pip时候,后面加上参数-i 镜像地址,例如:

pip3 install pygame -i http://mirrors.aliyun.com/pypi/simple/
永久修改:

pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/

[root@localhost bin]# ./pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/Writing to /root/.config/pip/pip.conf工作中遇到的问题总结
WARNING: The repository located at mirrors.aliyun.com is not a trusted
WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '–trusted-host mirrors.aliyun.com'.
ERROR: Could not find a version that satisfies the requirement Pillow3.4.2 (from versions: none)
ERROR: No matching distribution found for Pillow3.4.2
WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '–trusted-host mirrors.aliyun.com'.

解决方法:根据错误提醒,添加 --trusted-host mirrors.aliyun.com 即可,如下

[root@localhost bin]# ./pip install -r requirements.txt --trusted-host mirrors.aliyun.com
#13
python3 开发 / 解决 mysql.connector.errors.NotS...
上次发布者 jvip_chen - 2023-2月-06 03:51 下午
环境
mysql:8.0.11
python:3.6

错误描述
mysql.connector.errors.NotSupportedError) Authentication plugin 'caching_sha2_password' is not supported解决方案:

pip install MySQL-connector-python
#14
Linux 系统 / timedatectl命令使用介绍
上次发布者 jvip_chen - 2023-2月-06 12:37 下午
timedatectl是Linux下的一条命令,用于控制系统时间和日期。可以用来查询和更改系统时钟于设定,同时可以设定和修改时区信息。这篇文章简单介绍一下如何使用timedatectl进行常见操作。

基础知识
关于RTC/系统时钟/NTP/时区等基本信息和设定的介绍,可参看如下文章,本文不再赘述。

https://blog.csdn.net/liumiaocn/article/details/79250793
常见用法
使用timedatectl可以进行如下常见操作

  • 查看当前时间/日期/时区:timedatectl或者timedatectl status
  • 查看所有可用时区:timedatectl list-timezones
  • 设置时区:timedatectl set-timezone "时区信息"
  • 设置UTC:timedatectl set-timezone UTC
  • 设置时间:timedatectl set-time HH:MM:SS
  • 设置日期:timedatectl set-time YYYY-MM-DD
  • 设置日期时间:timedatectl set-time "YYYY-MM-DD HH:MM:SS"
  • 设置硬件时钟为本地时间:timedatectl set-local-rtc 1
  • 设置硬件时钟为UTC时间:timedatectl set-local-rtc 0
  • 启动NTP时间同步(启用NTP服务或者Chrony服务):timedatectl set-ntp true
  • 禁用NTP时间同步:timedatectl set-ntp false
#15
Linux 系统 / chmod命令详细用法
上次发布者 jvip_chen - 2023-1月-28 04:24 下午
指令名称 : chmod

使用权限 : 所有使用者

使用方式 : chmod [-cfvR] [–help] [–version] mode file...
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。

参数 :

mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

范例 :

将档案 file1.txt 设为所有人皆可读取 :

chmod ugo+r file1.txt
将档案 file1.txt 设为所有人皆可读取 :

chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :

chmod ug+w,o-w file1.txt file2.txt
ex1.py 设定为只有该档案拥有者可以执行 :

chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :

chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file

语法为:chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。

范例:

chmod a=rwx file

chmod 777 file
效果相同
chmod ug=rwx,o=x file



chmod 771 file
效果相同
若用chmod 4755 filename可使此程序具有root的权限.
指令名称 : chown
使用权限 : root

使用方式 : chmod [-cfhvR] [–help] [–version] user[] file...

说 明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由 系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才 有这样的权限。

把计 :

user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群 体(group)-c : 若该档案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结 (link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者 变更(即以递回的方式逐个变更)–help : 显示辅助说明–version : 显示版本

范例 :

将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :

chown jessie:users file1.txt
将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :

chmod -R lamport:users *
-rw------- (600) -- 只有属主有读写权限。
-rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) -- 只有属主有读、写、执行权限。
-rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。

以下是对目录的两个普通设定:

drwx------ (700) - 只有属主可在目录中读、写。
drwxr-xr-x (755) - 所有用户可读该目录,但只有属主才能改变目录中的内容。

运行 .sh 文件类型的文件:
用file命令测试一下看是什么类型的
file xxxx.sh
如果是Bourne-Again shell script 可以sh xxxx.sh 或者chmod +x xxxx.sh 再./xxx.sh
一般 .sh 的直接添加x(可执行属性) chmod +x xxx.sh 然后./xxx.sh就可以了
chmod是一个改变用户拥有指定文件的权限的命令.r:只读,w:写,x执行.也可以用数字
#16
PHP环境搭建 / CENTOS YUM 安装PHP7或PHP8
上次发布者 jvip_chen - 2022-12月-15 05:18 下午
1.安装源

yum install epel-release
Centos 7

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Centos 8

yum install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
Centos 9

yum install http://rpms.remirepo.net/enterprise/remi-release-9.rpm
2.安装YUM管理工具

yum install yum-utils
3. 查看PHP(可忽略此步骤)

yum search php73
 yum search php74
 yum search php80
 yum search php81

4.安装PHP


yum install php74-php-gd  php74-php-pdo php74-php-mbstring php74-php-cli php74-php-fpm php74-php-mysqlnd5.启动FPM

service php74-php-fpm start
#17
PHP环境搭建 / PHP7.x环境下安装memcache和memcached扩...
上次发布者 jvip_chen - 2022-12月-15 05:16 下午
如果使用php操作memcached服务器最方便的方式就是安装memcache扩展了,其实php还有另外一个扩展那就是memcached,和memcached服务同名,并且扩展提供的方法更便于使用,下面分别介绍一下两种扩展在PHP7环境下的安装方式。

注:以下介绍的安装方式为PHP的安装路径为/usr/local/php,如果你的服务器上PHP的安装目录不一致请按实际情况处理。

首先下载memcache扩展包

wget https://github.com/websupport-sk/pecl-memcache/archive/NON_BLOCKING_IO_php7.zip
#解压缩

unzip NON_BLOCKING_IO_php7.zip
#进入解压后的目录

cd pecl-memcache-NON_BLOCKING_IO_php7/
#生成配置文件

/usr/local/php/bin/phpize
#配置

./configure --with-php-config=/usr/local/php/bin/php-config
#编译
make
#安装
make install
安装后会出现Installing shared extensions: *****PHP的扩展目录,此目录一般为默认的php扩展目录,如果和默认的扩展目录不一致可以修改php.ini中的extension_dir为此目录

即在php.ini中添加

extension_dir="扩展目录"
然后再php.ini中添加memcache扩展

extension=memcache.so
重启php-fpm使之生效

#可以使用下面三种方式中的一种(具体看php的安装方式)

service php-fpm restart
kill -USR2

cat /usr/local/php/var/run/php-fpm.pid

systemctl reload php-fpm
至此memcache扩展安装完成。

下面介绍一下memcached扩展的安装方式,其实PHP的扩展安装方式非常类似

#首先需要安装libmemcached库

yum -y install libmemcached libmemcached-devel
#下载memcached扩展

wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
#解压

unzip php7.zip
cd php-memcached-php7/
/usr/local/php/bin/phpize
#配置

./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
在php.ini中添加memcached扩展

extension=memcached.so
和前面以上重启php-fpm使之生效

#可以使用下面三种方式中的一种(具体看php的安装方式)

service php-fpm restart
kill -USR2

cat /usr/local/php/var/run/php-fpm.pid

systemctl reload php-fpm
检测扩展是否安装成功可以使用phpinfo查看,如下图所示两个扩展已经安装成功
#18
PHP环境搭建 / php-fpm的配置和优化
上次发布者 jvip_chen - 2022-12月-15 05:09 下午
php-fpm的安装目录
下面是我的平时的环境搭建php的各种安装目录,大家的基本也差不多。

centos等linux平台
/usr/local/php/php
/usr/local/php/etc/php.ini
/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
mac平台
/usr/bin/php
/etc/php.ini
/usr/bin/php-fpm
/etc/php-fpm.conf
由于我开发以Mac为主,所以就用Mac的环境配置来学习。

php-fpm配置详解
这是搜索的一份还算算比较详细的php-fpm.conf配置详解,我会针对性的修改下,当然php手册上也有详细的讲解:http://php.net/manual/zh/install.fpm.configuration.php

pid = /usr/local/var/run/php-fpm.pid
#pid设置,一定要开启,上面是Mac平台的。默认在php安装目录中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid
error_log  = /usr/local/var/log/php-fpm.log
#错误日志,上面是Mac平台的,默认在php安装目录中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log
log_level = notice
#错误级别. 上面的php-fpm.log纪录的登记。可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。0 表示 '关闭该功能'. 默认值: 0 (关闭).
process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.
daemonize = yes
#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。
listen = 127.0.0.1:9000
#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。
listen.backlog = -1
#backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket设置选项,如果使用tcp方式访问,这里注释即可。
user = www
group = www
#启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。
pm = dynamic
#php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand
#如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。
#如果选择dynamic,则进程数是动态变化的,由以下参数决定:
pm.max_children = 50 #子进程最大数
pm.start_servers = 2 #启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 1 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 3 #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_requests = 500
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
pm.status_path = /status
#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
ping.path = /ping
#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。
ping.response = pong
#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
access.log = log/$pool.access.log
#每一个请求的访问日志,默认是关闭的。
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
#设定访问日志的格式。
slowlog = log/$pool.log.slow
#慢请求的记录日志,配合request_slowlog_timeout使用,默认关闭
request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
request_terminate_timeout = 0
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。
rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.
chroot =
#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
chdir =
#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)
catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
当然还有一些无关紧要的设置,用到了再说吧。
pid = /usr/local/var/run/php-fpm.pid
#pid设置,一定要开启,上面是Mac平台的。默认在php安装目录中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid
error_log  = /usr/local/var/log/php-fpm.log
#错误日志,上面是Mac平台的,默认在php安装目录中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log
log_level = notice
#错误级别. 上面的php-fpm.log纪录的登记。可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。0 表示 '关闭该功能'. 默认值: 0 (关闭).
process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.
daemonize = yes
#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。
listen = 127.0.0.1:9000
#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。
listen.backlog = -1
#backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket设置选项,如果使用tcp方式访问,这里注释即可。
user = www
group = www
#启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。
pm = dynamic
#php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand
#如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。
#如果选择dynamic,则进程数是动态变化的,由以下参数决定:
pm.max_children = 50 #子进程最大数
pm.start_servers = 2 #启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 1 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 3 #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
pm.max_requests = 500
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
pm.status_path = /status
#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
ping.path = /ping
#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。
ping.response = pong
#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
access.log = log/$pool.access.log
#每一个请求的访问日志,默认是关闭的。
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
#设定访问日志的格式。
slowlog = log/$pool.log.slow
#慢请求的记录日志,配合request_slowlog_timeout使用,默认关闭
request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off'
request_terminate_timeout = 0
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。
rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.
chroot =
#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.
chdir =
#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)
catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
当然还有一些无关紧要的设置,用到了再说吧。
一些重要的设置
php-fpm进程分配

在之前的文章中就说过了。在fasgcgi模式下,php会启动多个php-fpm进程,来接收nginx发来的请求,那是不是进程越多,速度就越快呢?这可不一定!得根据我们的机器配置和业务量来决定。

我们先来看下,设定进程的配置在哪里?

pm = static | dynamic | ondemand
pm可以设置成这样3种,我们用的最多的就上前面2种。

pm = static 模式
pm = static 表示我们创建的php-fpm子进程数量是固定的,那么就只有pm.max_children = 50这个参数生效。你启动php-fpm的时候就会一起全部启动51(1个主+50个子)个进程,颇为壮观。

pm = dynamic 模式
pm = dynamic模式,表示启动进程是动态分配的,随着请求量动态变化的。他由 pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers 这几个参数共同决定。
上面已经讲过,这里再重申一下吧:

pm.max_children = 50 是最大可创建的子进程的数量。必须设置。这里表示最多只能50个子进程。

pm.start_servers = 20 随着php-fpm一起启动时创建的子进程数目。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。这里表示,一起启动会有20个子进程。

pm.min_spare_servers = 10 务器空闲时最小php-fpm进程数量。必须设置。如果空闲的时候,会检查如果少于10个,就会启动几个来补上。

pm.max_spare_servers = 30 务器空闲时最大php-fpm进程数量。必须设置。如果空闲时,会检查进程数,多于30个了,就会关闭几个,达到30个的状态。
到底选择static还数dynamic?
很多人恐惧症来袭,不知道选什么好?

一般原则是:动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。

如果你的内存很大,有8-20G,按照一个php-fpm进程20M算,100个就2G内存了,那就可以开启static模式。如果你的内存很小,比如才256M,那就要小心设置了,因为你的机器里面的其他的进程也算需要占用内存的,所以设置成dynamic是最好的,比如:pm.max_chindren = 8, 占用内存160M左右,而且可以随时变化,对于一半访问量的网站足够了。

慢日志查询
我们有时候会经常饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。

这个时候,我们是可以开启慢日志功能的。

slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 15s
当一个请求该设置的超时时间15秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。

php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:

[21-Nov-2013 14:30:38] [pool www] pid 11877
script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
通过日志,我们就可以知道第2行的file_get_contents 函数有点问题,这样我们就能追踪问题了。
#19
1.通过命令查看服务器上一共开了多少的 php-cgi 进程

ps -fe |grep "php-fpm"|grep "pool"|wc -l
2.查看已经有多少个php-cgi进程用来处理tcp请求

netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
3.linux+nginx+php环境中,每个php-fpm进程的内存限制
设置方法:
编辑php-fpm.conf配置文件
php_admin_value[memory_limit] = 128M(我服务器上的配置文件在/etc/php5/fpm/pool.d/www.conf 这个文件是被包含在php-fpm.conf里的) 后边的数字可以随便更改:32M,64M,128M,256M,512M,这个设置可根据你的服务器内存大小和你的需求来写,修改后要加载一下php-fpm服务
#20
PHP环境搭建 / Ubuntu通过apt-get安装PHP
上次发布者 jvip_chen - 2022-12月-15 05:05 下午
1、添加php的PPA源

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
2、通过apt安装PHP

sudo apt-get install php-版本号