优化LNMP,Cache化请求

提醒:本文最后更新于 3941 天前,文中所描述的信息可能已发生改变,请仔细核实。

最近做了对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 © 开始时间-结束时间” 的版权提示。

最简单也是最常用的方式是:

<?php
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 &copy; ') . $firstpost_year;
    if($firstpost_year != $lastpost_year) {
        $copyright .= '-'. $lastpost_year;
    }
    $copyright .= ' ';
    echo $copyright;
}
?>

而其实只要这么一句就行了,把起始日期固定,结束时间动态即可:

<?php echo 'Copyright © 2012-'.date('Y'); ?>

这便实现相同的功能,省去查询,而且也比纯静态的,相对轻松一些,纯静态,你必须记得每过一年改下时间,还是麻烦一点。


接着给几张图,为VPS在高峰期,启动6个多小时(Uptime)的抽样。
Memcache

eAccelerator

MySQL

转载请注明转自:kn007的个人博客的《优化LNMP,Cache化请求