分类 PHP 下的文章

Configuration

首先需要确定影响 php-fpm 子进程数的几个配置项。

# 设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。
# static - 子进程的数量是固定的(pm.max_children)。
# ondemand - 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时 pm.start_servers 就启动了。
# dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。
pm string

# pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。
pm.max_children int

# 设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。
pm.start_servers int

# 设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。
pm.min_spare_servers int

#设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。
pm.max_spare_servers int

#秒数,多久之后结束空闲进程。 仅当设置 pm 为 ondemand。 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:10s。
pm.process_idle_timeout mixed

#设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 '0' 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。
pm.max_requests int

- 阅读剩余部分 -

#启用操作码缓存。如果禁用此选项,则不会优化和缓存代码。 在运行期使用 ini_set() 函数只能禁用 opcache.enable 设置,不可以启用此设置。 如果在脚本中尝试启用此设置项会产生警告。
opcache.enable=1  

#OPcache 的共享内存大小,以兆字节为单位。可以使用opcache_get_status()方法查看opcache目前消耗的内存(下周可能会更多)进而判断你是否需要增加这个设置的值。
opcache.memory_consumption=512

#关于这个选项的文档数基本是0,PHP使用了一个叫做内部字符串技术来提升性能,比如在你代码里面使用了1000次foobar字符串,PHP内部只存储foobar这个字符串一次不可变字符串,另外的999次使用指针去指向内部字符串,更深层次的说,这个设置并不是为每个php-fpm进程设置一个不可变的字符串的池,而是所有的php-fpm进程共享的,它节省内存,提高性能,在大的应用中效果更显著。它的值单位是M,所以”16”代表16MB,默认值比较小4MB。
opcache.interned_strings_buffer=0

#控制一次最多可以加载多少个PHP文件到内存。将这个值设置的比你工程的PHP文件多是非常重要的。
opcache.max_accelerated_files=47289

#简单的说,多久(单位是秒)检查一次你的代码缓存(opcache)是否过期。0代表每一个请求都回去检查你的PHP代码(代价比较大,每次请求会添加很多stat的系统调用去检查文件的最后修改时间,而每次每次系统调用都涉及到内核的中断还有上下文的切换,代价比较大)。在开发环境可以直接设置为0,生产环境下设置跟下一个设置项有关。
opcache.revalidate_freq=60

#当这个选项开启的时候,PHP将每隔(你设置的opcache.revalidate_freq 的值)秒去检查文件的最后修改时间。
opcache.validate_timestamps=0

#另外一个有趣的但没有用文档的选项,”允许快速关闭”,哦,好的,就像解释的这样,它实际上做的是提供一个快速调用你代码中析构函数的机制加速一个单个请求的相应,加速php worker的回收进行更快的准备处理下一个请求。设置为1代表打开它。
opcache.fast_shutdown=1

- 阅读剩余部分 -

bc是Binary Calculator的缩写。bc函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale没有提供,就用bcscale的缺省值。这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string。

bcadd — 2个任意精度数字的加法计算
bccomp — 比较两个任意精度的数字
bcdiv — 2个任意精度的数字除法计算
bcmod — 对一个任意精度数字取模
bcmul — 2个任意精度数字乘法计算
bcpow — 任意精度数字的乘方
bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
bcscale — 设置所有bc数学函数的默认小数点保留位数
bcsqrt — 任意精度数字的二次方根
bcsub — 2个任意精度数字的减法

- 阅读剩余部分 -

什么是二进制安全?

C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含“0”(空字符),否则字符串中的“0”将被误认为是字符串结束符,这些限制使得C字符串只能保存文本数据,而不能保存像图片、音频、视频、压缩文件这样的二进制数据。而PHP的字符串则不同,其支持二进制数据的存储,PHP在处理带二进制字符的字符串时,程序不会对其中的数据做任何限制、过滤或者假设,数据在写入时是什么样的,它被读取时就是什么样,这种能力称为字符串的二进制安全。

PHP字符串与C字符串

- 阅读剩余部分 -