PHP8 运行时配置

2023-08-24 15:52 更新

这些函数的行为受 ​php.ini​ 中的设置影响。

尽管默认的APCu设置对于许多安装来说都很好,但是认真的用户应该考虑调优以下参数。

在配置APCu时需要做出一个决定。有多少内存将被分配给APCu。控制它的ini指令是apc。请仔细阅读下面的相关章节。

一旦服务器开始运行,与扩展捆绑在一起的apc.php脚本应该复制到根目录的某个地方,并使用浏览器查看,因为它提供了APCu内部工作的详细分析。如果在PHP中启用了GD,它甚至会显示一些有趣的图形。

如果APCu正在工作,则缓存满计数(在左侧)将显示缓存达到最大容量并且必须退出条目以释放内存的次数。在驱逐期间,如果apc。如果指定了ttl, APCu将首先尝试删除过期的条目,即ttl已经过期的条目,或者没有ttl设置并且在最后一个apc中没有访问过的条目。ttl秒。如果apc。ttl没有设置,或者删除过期的条目没有释放足够的空间,APCu将清除整个缓存。

在配置良好的缓存中,清除的次数应该是最少的。如果缓存不断被填充,并因此被强制释放,那么由此产生的搅动将对脚本性能产生不利影响。最小化这个数字的最简单方法是为APCu分配更多内存。

当APCu使用mmap支持(内存映射)编译时,它将只使用一个内存段,不像APCu使用SHM (SysV共享内存)支持构建时使用多个内存段。MMAP不像SHM在/proc/sys/kernel/shmmax中那样有最大限制。一般来说,推荐使用MMAP支持,因为它可以在web服务器重新启动时更快地回收内存,并且总而言之可以减少启动时内存分配的影响。

APCu configuration options
名字 默认 可修改范围 更新日志
apc.enabled "1" PHP_INI_SYSTEM  
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "32M" PHP_INI_SYSTEM  
apc.entries_hint "4096" PHP_INI_SYSTEM  
apc.ttl "0" PHP_INI_SYSTEM  
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "1" PHP_INI_SYSTEM  
apc.enable_cli "0" PHP_INI_SYSTEM  
apc.use_request_time "0" PHP_INI_ALL Prior to APCu 5.1.19, the default was "1".
apc.serializer "php" PHP_INI_SYSTEM Prior to APCu 5.1.15, the default was "default".
apc.coredump_unmap "0" PHP_INI_SYSTEM  
apc.preload_path NULL PHP_INI_SYSTEM  

有关 PHP_INI_* 样式的更多详情与定义,见 配置可被设定范围

这是配置指令的简短说明。

apc.enabled bool

apc.enabled 可以设置为0来禁用APC。当APC静态编译为PHP时,这主要是有用的,因为没有其他方法可以禁用它(当编译为DSO时, php.ini 中的 extension 行可以被注释掉)。

apc.shm_segments int

为编译器缓存分配的共享内存段的数量。如果APC用完共享内存,但是 apc.shm_size 设置为系统允许的最大值,提高这个值可以防止APC耗尽内存。

apc.shm_size string

每个共享内存段的大小由本常见问题解答中描述的速记符号给出。默认情况下,一些系统(包括大多数BSD变体)对共享内存段的大小限制非常低。

apc.entries_hint int

关于可能存储的不同变量的数量的“提示”。设置为零或省略,如果不确定。

apc.ttl int

如果没有显式TTL的缓存项在这么多秒内没有被访问,就认为它们已经过期。实际上,这允许在缓存插入期间或在完全删除之前机会地删除此类条目。请注意,由于删除是机会性的,因此即使条目比 apc.ttl 更早,它们仍然可以读。此设置对显式指定TTL的缓存项没有影响。

apc.gc_ttl int

缓存项在垃圾收集列表中可能保留的秒数。此值在服务器进程在执行缓存源文件时死亡时提供故障保护;如果该源文件被修改,那么为旧版本分配的内存将不会被回收,直到达到这个TTL。设置为0禁用此功能。

apc.mmap_file_mask string

如果使用 --enable-mmap 在MMAP支持下编译,这是传递给MMAP模块的mktemp风格的file_mask,用于确定MMAP的内存区域是文件支持还是共享内存支持。对于直接支持文件的mmap,将其设置为 /tmp/apc.XXXXXX(正好6个​x​)。要使用posix风格的shm_open/mmap,在你的掩码中放一个​.shm​。例如 /apc.shm.XXXXXX 。您也可以将其设置为 ​/dev/zero​ ,以使用内核的 ​/dev/zero​ 接口来匿名mmap内存。不定义它将强制使用匿名mmap。

apc.slam_defense int

在非常繁忙的服务器上,每当您启动服务器或修改文件时,您都可以创建许多进程的竞争,这些进程都试图同时缓存同一个文件。此选项设置跳过尝试缓存未缓存文件的进程的百分比。或者把它看作是单个进程跳过缓存的概率。例如,设置 apc.slam_defense 为 ​75​ 意味着进程不缓存未缓存文件的概率为75%。因此,设置越高,对缓存攻击的防御就越强。将其设置为 ​0​ 将禁用此功能。

apc.enable_cli int

主要用于测试和调试。设置此选项可为PHP的CLI版本启用APC。在正常情况下,在每个CLI请求上创建、填充和销毁APC缓存并不理想,但对于各种测试场景,能够轻松地为CLI版本的PHP启用APC是有用的。

apc.serializer string

用于配置APC使用第三方序列化器。

apc.coredump_unmap bool

启用APC处理信号,如SIGSEGV,当发出信号时写入核心文件。当接收到这些信号时,APC将尝试解除共享内存段的映射,以便将其从核心文件中排除。当接收到致命信号并配置了较大的APC共享内存段时,此设置可以提高系统稳定性。

警告

这个特性有潜在的危险。如果发生致命错误,在致命信号处理程序中取消共享内存段的映射可能会导致未定义的行为。

注意:

尽管某些内核可能提供了在生成核心转储文件时忽略各种类型共享内存的功能,但这些实现也可能忽略重要的共享内存段,如Apache记分牌。

apc.preload_path string

可选地,设置APC将在启动时加载缓存数据的目录的路径。

apc.use_request_time bool

使用SAPI请求开始时间为TTL。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号