写在前面
很多低内存的服务器比如1G或者更低的服务器,安装宝塔面板后发现经常内存爆满,很多用户误以为是宝塔占用较大的内存导致的问题,其实不然,宝塔本身占用的系统内存并不高的,大约70M左右的内存占用,以linux为例所以我们要如何优化降低服务器的内存消耗呢。
我们安装完成BT(宝塔面板)建好网站之后,需要给面板和服务器做一些简单的设置,比如说php优化、myql优化、开启php缓存、网站流量限制等等来提高服务器的性能,当然对于你用了BT(宝塔面板)来说,这些步骤都很简单,我们直接都是在面板里面来操作。
本文参考:
BT(宝塔面板)简单优化加快网站访问速度以及一些简单的CC防护
宝塔如何优化(针对面板mysql、cpu以及带宽跑满优化方案)
PHP优化
优化PHP性能参数
降低max_children,【max_children最大子进程数量】越大,并发能力越强,但max_children最大不要超过5000,可以参考并发方案选择对应的内存对应的方案,然后适当降低max_children
安装 PHP 缓存扩展
php版本强烈建议选择php7.0以上版本的, php 缓存扩展推荐使用 Opcache 脚本缓存和 Memcached或者redis内容缓存。在软件管理>>你使用的 php 版本最右侧点击“设置”,进入安装扩展,右侧点击这两个扩展后面的“安装”,再确认一次,Opcache很快搞定,但是memcached这玩意安装起来还是有点缓慢的。
内容缓存和脚本缓存都只安装一个,不要同时安装多个。但是呢Memcached或者redis这两个内容缓存我们可以同时安装,没有什么冲突。当然了,我们还可以安装imagemagick来提高 Imagick高性能图形库,如果你需要的话。
SESSION存储设置
Session 称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求 http 地址时,将传递到web服务器上并与访问信息进行匹配,宝塔默认 Session 保存在指定的文件夹中,当用户访问时要从文件中检索 Session ID ,效率不高,宝塔面板可以把 Session 存储位置修改到 redis ,提高会话信息检索效率,减少响应时间。
注意:
Redis扩展仅支持一个PHP版本安装使用
设置方法:
打开 redis 设置窗口,再点击 redis 窗口的左侧【性能调整】,在 requirepass 一栏输入密码,这个密码自己设置,越复杂越好,设置完成后复制你设置的密码,然后点击【保存】。
找到对应的 php 版本,点击右侧的【设置】,打开 php 管理窗口,在 php 管理窗口点击左侧的 【 Session设置 】,然后在密码位置粘贴上一步复制的密码,然后点击保存。
卸载不需要的一些软件
以阿里云为例,阿里云服务器会自动运行阿里云盾。比如安装了多个版本的php,但是使用的却使用一个,则保留一个版本的即可,去掉多余的php。
添加计划任务,定期清理系统内存
建议在宝塔面板-计划任务中设置定期任务,如每天释放一次内存,释放PHP、MYSQL、PURE-FTPD、APACHE、NGINX的内存占用,建议在每天半夜执行,这样不会对已网站用户带来影响。
启用流量控制方案,安装防火墙
网站被频繁的高并发访问也会带来高内存的占用,因此要注意屏蔽恶意访问,非正常的访问流量,避免服务器和网站被攻击导致高内存的占用。
添加 Swap
Swap 推荐值:2G 和 2G 以下内存的服务器,设置成和物理内存相同容量 SWAP;2G 以上的,设置为 2G。如果跑的程序特别耗费内存,2G 内存以上的 Swap 也可以设置与内存相同。面板也自带了如何添加swap的详细说明。官方也给了swap的设置值:
Swap推荐值
物理内存 |
Swap |
---|---|
512M | 1024M |
1GB | 1500M |
2GB | 2048M |
4GB | 4096M |
6GB+ | 4096M |
MySQL性能简单调优
MySQL配置参数调优 (需要根据网站运行情况调整),不过宝塔面板集成了几个优化方案,我们选择一下就可以了。
宝塔面板还是很贴心的,给出了5个不同的优化方案,我们只要对应自己的配置来选择即可。不过有一些地方需要简单说明一下。
这里我设置之后显示的最大内存反而变大了,但我还是设置了
查询缓存命中率
MySQL查询缓存是个比较受争议的功能,个人建议当你有在使用redis、memcached等缓存软件时,将query_cache_size设为0可以将其关闭,当你没有使用缓存软件,有多余的内存使用,且数据库瓶颈明显存在时,可以尝试开启查询缓存,这是个非常依赖数据表结构及SQL语句优化的功能,若数据表结构和SQL语句都针对查询缓存进行过优化,它的效果还是很不错的。所以我们还是要配和memcached等缓存来使用,这样效果就会更好,大鸟这里就是把query_cache_size设为0。你们也不妨试试看,如果有更好的方案欢迎交流。
设置好之后别忘了重启MySQL服务,如果重启出现问题,我们可以看这篇文章(BT(宝塔面板)mysql 启动错误-server PID file could not be found)
优化mysql内存占用
mysql服务通常是占用内存较高的服务之一,最消耗内存的,因此我们需要调整优化性能,点击mysql设置-性能调整key_buffer_size,query_cache_size等各个参数的设置。
我们需要结合当前状态下的活动/峰值连接数,线程缓存命中率,索引命中率,Innodb索引命中率,查询缓存命中率等值来做调整和优化,比如活动/峰值连接数连接数只有20,把最大连接数设置为30-50只有即可,这样可以大大降低mysql的最大内存占用,其他参数也可以市场最一些调整和降低。
我经这一步操作后,内存占用从63%降到了58%
注意下面这张图是我设了1-2GB方案之前的默认方案
NGINX优化
开启gzip压缩
压缩也可以说是加速网站一个大因素,相比没有压缩过的和压缩过的都是两个差别。
使用宝塔安装NGINX的话,宝塔已经默认开启且设置了2的压缩率。(0为未压缩大小、9为最高压缩大小。)
找到宝塔面板 – 软件商店 – 运行环境 – nginx – 设置 – 性能调整,
gzip_comp_level 压缩率。设置为 5或者6,服务 – 重启。
注意:压缩等级也不是越高越好, (压缩级别,1压缩比最小处理速度最快,9压缩比最大但处理最慢,同时也最消耗CPU),如果是配置比较低的服务器,1h2g或者2h4g的建议在3-5即可,配置在高点服务器CPS空闲资源多可以自己往上加。
修改Nginx环境Gzip压缩默认输出MIME类型
Nginx原配置:
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
修改为:
gzip_types application/atom+xml application/javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-font-opentype application/x-font-truetype application/x-javascript application/x-web-app-manifest+json application/xhtml+xml application/xml font/eot font/opentype font/otf image/svg+xml image/x-icon image/vnd.microsoft.icon text/css text/plain text/javascript text/x-component;
点击保存之后,重载 Nginx 配置,再重启下 Nginx 即可。
gzip_types 是进行压缩的文件类型,缺啥补啥就行了,宝塔 Nginx 环境 Gzip 压缩默认输出 MIME 类型很少,所以在这里我们增加一些补上去。
JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了。
不过你要考虑自己的CDN之类的,如果静态文件已经丢出去了,也就没必要了!
经过上述操作,我的内存从65%降到了57%,网站访问速度似乎也快了不少。
No Comment