精品软件与实用教程
安装Memcached扩展 WordPress 网站访问速度慢需要 LCP优化 的解决方法
安装Memcached扩展 进行 LCP优化 LCP是最近几年Google推出的一个网站评估指标,LCP(Largest Contentful Paint)最关键的两个指标,一个是LCP另外一个是CLS,将LCP优化到2秒之内的话,在Google搜索中会有更多的网站展示机会。LCP优化 在WordPress中有很多热门缓存插件,大家可以去安装缓存插件。无论如何优化缓存,最终还是要缩短初始服务器的响应用时,在LCP优化之前,需要先配置服务器缓存。
关于LCP具体参考:优化 Largest Contentful Paint 最大内容绘制
网址未被视为良好网址的原因图例。
服务器端缓存工具
缓存(或内容缓存)是一种广泛使用的技术,用于将数据副本存储在临时存储位置(也称为缓存)中,因此与从原始存储中检索数据相比,可以轻松,快速地访问数据。根据缓存的类型和目的,存储在缓存中的数据可以包括文件或文件片段(例如HTML文件,脚本,图像,文档等),数据库操作或记录,API调用,DNS记录等。
Linux服务器的缓存工具有很多优秀的开源缓存工具,Memcached和Redis等等,下面主要介绍一下Memcached的使用方法。
Memcached
Memcached是一个免费,开源,简单但功能强大的分布式内存对象缓存系统。它是内存中的键值存储区,用于存储小块数据,例如数据库调用,API调用或页面呈现的结果。它可以在类似Unix的操作系统(包括Linux和OS X)上运行,也可以在Microsoft Windows上运行。
什么是Memcached 内存缓存
免费开源、高性能、分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态 Web 应用程序。
Memcached 是一种内存中的键值存储,用于存储来自数据库调用、API 调用或页面呈现结果的任意小块数据(字符串、对象)。
Memcached 简单而强大。其简单的设计促进了快速部署、易于开发,并解决了大数据缓存面临的许多问题。其 API 适用于大多数流行语言。
Memcached官网 :http://memcached.org
最新稳定版:memcached-1.6.18.tar.gz (2023-1-10)
Memcached安装
Debian/Ubuntu:apt-get 安装 libevent-dev Redhat/Centos:dnf 安装 libevent-devel
下载源码编译安装
wget http://memcached.org/latest tar -zxvf memcached-1.6.18.tar.gz cd memcached-1.6.18 ./configure && make && make test && sudo make install
安装完毕后需要启动
#查看memcache是否安装完成 ls -al /usr/local/bin/mem* #启动memcache的服务 /usr/local/bin/memcached -d -m 200 -u www -p 11211 -c 256 -P /tmp/memcached.pid
Memcache参数说明:
- -d选项是启动一个守护进程,
- -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB
- -u是运行Memcache的用户,这里是root
- -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址202.207.177.177
- -p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口
- -c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定
- -P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid
通过软件仓库安装
dnf install libevent-devel memcached
安装之后,设置开机启动
#启动 systemctl start memcached #设置开机启动 systemctl enable memcached #查看当前状态 systemctl status memcached
Memcached修改缓存大小
安装完毕后,修改 memcached 的缓存大小,默认是64M,将缓存修改为1024M
打开 /etc/sysconfig/memcached 文件,将CACHESIZE修改为:1024
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="1024" OPTIONS="-l 127.0.0.1,::1,controller"
修改完毕后,systemctl restart memcached
重新启动服务
ps -ef | grep memcached
查看一下配置是否生效
Memcached安装完毕后,如果想让Memcached在网站中正常工作,还需要在PHP中安装Memcached扩展.
安装Memcached扩展
注意:在安装Memcached之前,需要了解,在PHP扩展中有Memcache扩展和Memcached扩展两种,Memcached扩展是Memcache扩展的升级版本,支持功能更多。性能更好。注意不要安装错了。
- memcache 是 pecl 扩展库版本,支持原生 php,属于第一代cache;
- memcached 是 libmemcached 版本,出现较后,是新一代cache,因此也更加完善,推荐使用memcached 。
通过DNF 方式安装的PHP8.0的安装路径和配置位置如下:
- RPM包安装PHP的安装路径:/usr/bin/php-config
- PHP的配置文件:/etc/php.ini
下面是Memcache扩展和Memcached扩展的安装方法,如无Memcache扩展的安装需求,可以直接跳转的Memcached扩展的安装方法
源码安装Memcache扩展
安装Memcache扩展所需依赖。
dnf install zlib zlib-devel
第一步:打开https://pecl.php.net/package/memcache下载php8的Memcache扩展安装包。
注意:php版本不同,Memcache扩展安装包也不一样,找对应的版本安装。
php8的Memcache扩展安装包:https://pecl.php.net/get/memcache-8.0.tgz
第二步:登录服务器,下载解压Memcache扩展安装包
wget https://pecl.php.net/get/memcache-8.0.tgz tar -xvf memcache-8.0.tgz cd memcache-8.0
第三步:安装Memcache扩展
phpize ./configure --with-php-config=/usr/bin/php-config make && make install
安装成功后,会显示安装位置 Installing shared extensions: /usr/lib64/php/modules/
第四步:修改php.ini文件,启用Memcache扩展,在php.ini文件末尾加上下面内容。
extension = memcache
测试PHP配置是否正确,然后重新启动PHP服务
php-fpm -t systemctl restart php-fpm
查看php探针文件,扩展正常启动
源码安装Memcached扩展
第一步:打开https://pecl.php.net/package/memcached下载php8的Memcached扩展安装包。
注意:php版本不同,Memcached扩展安装包也不一样,找对应的版本安装。
php8的Memcached扩展安装包:memcached-3.2.0.tgz
第二步:登录服务器,下载解压Memcached扩展安装包
wget https://pecl.php.net/get/memcached-3.2.0.tgz tar -xvf memcached-3.2.0.tgz cd memcached-3.2.0
memcached,这个扩展需要 libmemcached 客户端库,否则会出现如下错误:
error: memcached support requires libmemcached. Use --with-libmemcached-dir=<DIR> to specify the prefix where libmemcached headers and library are located
dnf install libmemcached libmemcached-devel remi-libmemcached-awesome
注意:如果在软件仓库中没有libmemcached-devel,可以下载安装
wget https://vault.centos.org/centos/8/PowerTools/x86_64/os/Packages/libmemcached-devel-1.0.18-15.el8.x86_64.rpm dnf --enablerepo=powertools install libmemcached-devel
第三步:安装Memcached扩展
phpize ./configure --with-php-config=/usr/bin/php-config make && make install
安装成功后,会显示安装位置 Installing shared extensions: /usr/lib64/php/modules/
第四步:修改php.ini文件,启用Memcached扩展,在php.ini文件末尾加上下面内容。
extension = memcached
测试PHP配置是否正确,然后重新启动PHP服务
php-fpm -t systemctl restart php-fpm
查看php探针文件,Memcached扩展正常启动
你可以在无需下载源码的情况下,使用pecl命令安装memcached扩展
pecl install memcached
知识点:如果无法使用dnf在软件仓库中安装php扩展,可以使用pecl命令在php官方扩展库中进行安装。
Memcached扩展安装完毕后,还需要进行WordPress与Memcached的连接,如果不进行服务器端与WEB端的连接的话,Memcached缓存将不会起作用。
WordPress配置Memcached缓存
在wp-config.php中添加如下内容。
global $memcached_servers; $memcached_servers = array( array( '127.0.0.1', // Memcached server IP address 11211 // Memcached server port ) );
如果多站点缓存设置的话,参考下面内容:
global $memcached_servers; $memcached_servers = array( array( '1.2.3.4', 11211 ), array( '1.2.3.5', 11211 ) );
memcached 监听 IP 和端口,你可以通过如下命令查看:
netstat -nutlp | grep memcache
在WordPress中使用缓存插件配置memcached
下载安装W3 Total Cache Pro v2.3.0 免费下载破解版!WordPress缓存插件推荐
W3TC目前可以在插件界面配置memcached内存缓存,无需复杂配置,也无需修改代码等等,W3TC功能强大,缓存配置选项繁多,可以配合WP Meteor插件使用。
如何监控Memcached工作是否正常
将memcache.php文件下载后,上传到服务器上WordPress目录下,在上传之前,先修改文件内的访问用户口令。
$VERSION='$Id$'; define('ADMIN_USERNAME','设置一个用户名'); // Admin Username define('ADMIN_PASSWORD','设置一个密码'); // Admin Password define('DATE_FORMAT','Y/m/d H:i:s'); define('GRAPH_SIZE',200); define('MAX_ITEM_DUMP',50); $MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array //$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // 如果是多站点内存缓存,设置这里
上传之后,访问memcache.php文件的URL地址,即可看到内存缓存的工作页面。
Zend OPcache配置
使用 Opcache 进行 PHP 代码编译加速优化。提高代码的执行效率 我们可以使用OPcache来提高PHP代码的执行效率, 减少每次加载和解析 PHP 脚本的开销。在php8中OPcache是默认开启的。
PHP配置jit,PHP 8在PHP的内核中添加了JIT编译器,可以极大地提高性能。更强的cpu密集处理,或许以后php也可以适当做复杂协议解析。
首先,仅在启用opcache的情况下,JIT才有效,这是大多数PHP安装的默认设置,但您应确保opcache.enable在php.ini文件中将其设置为1 。通过opcache.jit_buffer_size设置JIT。
只需要配置php.ini就可以了,在php.ini末尾添加:
opcache.enable=1 opcache.jit_buffer_size=100M opcache.jit=1255 opcache.revalidate_freq=0 opcache.validate_timestamps=0 opcache.max_accelerated_files=7963 opcache.memory_consumption=192 opcache.interned_strings_buffer=16 opcache.fast_shutdown=1
opcache.revalidate_freq
这个选项用于设置缓存的过期时间 (单位是秒),当这个时间达到后,opcache 会检查你的代码是否改变,如果改变了 PHP 会重新编译它,生成新的opcode,并且更新缓存。值为 "0" 表示每次请求都会检查你的 PHP 代码是否更新(这意味着会增加很多次stat系统调用,译注: stat系统调用是读取文件的状态,这里主要是获取最近修改时间,这个系统调用会发生磁盘I/O,所以必然会消耗一些CPU时间,当然系统调用本身也会消耗一些CPU时间)。可以在开发环境中把它设置为0,生产环境下不用管,因为下面会介绍另外一个设置选项。
opcache.validate_timestamps
当这个选项被启用(设置为1),PHP会在 opcache.revalidate_freq 设置的时间到达后检测文件的时间戳(timestamp)。
如果这个选项被禁用(设置为0),opcache.revalidate_freq 会被忽略, PHP 文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能, 你会看不到更新的效果,你必须得重新加载你的 PHP (使用 kill -SIGUSR2 强制重新加载)。
这个设定是不是有些蛋疼, 但是我强烈建议你在生产环境中使用, why?因为当你在更新服务器代码的时候,如果代码较多,更新操作是有些延迟的,在这个延迟的过程中必然出现老代码和新代码混合的情况,这个时候对用户请求的处理必然存在不确定性。
opcache.max_accelerated_files
这个选项用于控制内存中最多可以缓存多少个 PHP 文件,这个选项必须得设置得足够大,大于你的项目中的所有 PHP 文件的总和。我的代码库大概有 6000 个 PHP 文件,所以我把这个值设置为一个素数 7963 (译注: 不知道这哥们为什么要设置这个数,7963 也不是大于 6000 的最小素数),你可以运行 "find . -type f -print | grep php | wc -l" 这个命令来快速计算你的代码库中的PHP文件数。
opcache.memory_consumption
这个选项的默认值为 64MB,我把它设置为 192MB,因为我的代码很大。你可以通过调用 opcachegetstatus() 来获取 opcache 使用的内存的总量,如果这个值很大,你可以把这个选项设置得更大一些。
opcache.interned_strings_buffer
这是一个很有用的选项,但是似乎完全没有文档说明。PHP 使用了一种叫做字符串驻留 (string interning) 的技术来改善性能。例如,如果你在代码中使用了 1000 次字符串 "foobar",在 PHP 内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的 999 次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次。
默认情况下这个不可变的内存区域只会存在于单个 php-fpm 的进程中,如果设置了这个选项,那么它将会在所有的 php-fpm 进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。
这个选项的值是以兆字节 (megabytes) 作为单位,如果把它设置为16,则表示16MB,默认是4MB,这是一个比较低的值。
opcache.fast_shutdown
另外一个很有用但也没有文档说明的选项。从字面上理解就是"允许更快速关闭"。它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器,从而加快 PHP 的响应速度和 PHP 进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为 1 就可以使用这个机制了。