提醒:本文最后更新于 4145 天前,文中所描述的信息可能已发生改变,请仔细核实。
最近做了对PHP、Nginx、MySQL进行了优化,其次对个别页面进行安全性及读取效率提升。主要内容有(文章最后有图):
首先交代下eA、MC及MySQL的query_cache部分的Cache大小均为64MB。
添加eAccelerator优化和缓存动态PHP运算,虽然现在运用的并不多,才使用了超过1/3的shm,但是命中率不错,而且明显迟缓感减少。
调整Memcache配置,命中率和存储量增多,超过80%的存储,命中率超过7成。特别是将一些大查询页面(单页超过10000的查询量)页面,进行了查询Cache化,存储在MC,大概是4M/页的数据。
使用tuning-primer查看并修改MySQL配置,使之MySQL更能利用VPS的性能,特别是一些大查询进行存储(query_cache),超过9成的存储量,不过在expired和hit方面仍然存在一定缺陷。
对Nginx配置进行修改,特别是gzip及rewrite规则上,其次微调及添加一些参数提高性能,效果不错(对主要部分的rewrite部分进行精简,并且添加触发条件,其他为微调,Hook CPU Core方面)。FastCGI有略微修改,不过收效甚微。不过也出现了个别问题,偶尔转发规则会使得域名自动附上端口(因为使用了Varnish,所以Nginx分配给博客的是8080端口)。
对带有input及post页面,进行防止XSS跨站攻击及屏蔽SQL注入的安全性措施(如:IP地址查询),另外就是减少php程序的冗余请求。
目前因为主题框架原因及个人原因使得但页面最小查询量大于50,标准查询量超过80,个别上W查询量。而降低查询量,精简查询,是必对Mysql进行减少,对查询做优化,缓存查询。还有一些就是主题本身一些冗余的函数、参数、查询请求需要在不影响功能的同时实现节俭。这些是我现在没时间去搞的东西。可能等什么时候有劲的时候再搞。
至于什么叫精简查询,其实就是效率算法,作用是化繁为简。举个简单的例子,大家的博客在footer方面都会有诸如 “Copyright © 开始时间-结束时间” 的版权提示。
最简单也是最常用的方式是:
global $wpdb;
$post_datetimes = $wpdb->get_row($wpdb->prepare("SELECT YEAR(min(post_date_gmt)) AS firstyear, YEAR(max(post_date_gmt)) AS lastyear FROM $wpdb->posts WHERE post_date_gmt > 1970"));
if ($post_datetimes) {
$firstpost_year = $post_datetimes->firstyear;
$lastpost_year = $post_datetimes->lastyear;
$copyright = __('Copyright © ') . $firstpost_year;
if($firstpost_year != $lastpost_year) {
$copyright .= '-'. $lastpost_year;
}
$copyright .= ' ';
echo $copyright;
}
?>
而其实只要这么一句就行了,把起始日期固定,结束时间动态即可:
这便实现相同的功能,省去查询,而且也比纯静态的,相对轻松一些,纯静态,你必须记得每过一年改下时间,还是麻烦一点。
接着给几张图,为VPS在高峰期,启动6个多小时(Uptime)的抽样。
Memcache:
eAccelerator:
MySQL:
转载请注明转自:kn007的个人博客的《优化LNMP,Cache化请求》
太高深了,表示看不懂。
@灵尘子: 好吧
我擦,七七,你的这篇文章在谷歌的“lnmp优化”关键词下排第7。。
@郑杰: 。。这没什么。。。百度的收录索引一直在减少。我对百度不带希望了。加上php、mysql的版本高,貌似百度出的结构化插件,不起作用。。没时间想了。
你还没把东西发给我呢。