1. 启用并优化OPcache扩展
OPcache是PHP的字节码缓存扩展,能有效减少脚本编译时间和磁盘I/O,显著降低内存消耗。在Ubuntu中,首先通过sudo apt install php-opcache安装扩展,然后编辑/etc/php/{version}/fpm/php.ini(根据PHP版本调整路径),添加或修改以下配置:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128 # 缓存大小(MB),根据服务器内存调整
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000 # 缓存文件数量
opcache.revalidate_freq=60 # 文件检查频率(秒)
重启PHP-FPM使配置生效:sudo systemctl restart php{version}-fpm。
2. 配置ThinkPHP缓存机制
合理使用ThinkPHP的缓存功能,减少重复计算和数据库查询。
config/app.php中配置文件缓存路径,适用于中小规模数据:'cache' => [
'type' => 'file',
'path' => runtime_path() . 'cache',
],
'cache' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '', // 若有密码需填写
'select' => 0, // Redis数据库索引
],
确保已安装Redis扩展(sudo apt install php-redis)并启动Redis服务。3. 优化数据库查询与连接
数据库操作是内存消耗的主要来源之一,需通过以下方式优化:
where、order by条件中的字段)创建索引,避免全表扫描。EXPLAIN分析慢查询,拆分复杂子查询,避免SELECT *(只查询必要字段)。Swoole的协程连接池)减少连接建立和销毁的开销,提升并发性能。4. 调整PHP内存限制
根据应用需求调整PHP内存限制,避免因内存不足导致进程终止。编辑php.ini文件,修改memory_limit参数(如memory_limit = 256M),注意不要设置过高(如超过服务器物理内存),以免引发系统内存溢出。
5. 代码层面优化
unset())。yield)逐行读取数据,而非一次性加载到内存。6. 使用CDN加速静态资源
将静态资源(图片、CSS、JavaScript、字体等)托管到CDN(内容分发网络),减少服务器内存消耗和响应时间。配置Nginx反向代理时,添加静态资源转发规则:
location ~* \.(jpg|jpeg|png|gif|css|js|ico|woff2)$ {
expires 30d; # 设置缓存时间
access_log off; # 关闭访问日志
add_header Cache-Control "public";
}
将静态资源目录指向CDN地址,降低服务器负载。
7. 启用Gzip压缩
通过Gzip压缩HTML、CSS、JavaScript等文本内容,减少传输数据量,间接降低服务器内存占用。在Nginx中启用Gzip:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024; # 只压缩大于1KB的文件
gzip_comp_level 6; # 压缩级别(1-9,越高压缩率越高,但消耗更多CPU)
重启Nginx使配置生效:sudo systemctl restart nginx。
8. 监控与分析内存使用
使用工具定位内存瓶颈,针对性优化:
memory_get_usage()函数跟踪)。top、htop查看进程内存占用,free -h查看系统内存使用情况。