下面这段代码是一个用PHP编写的网站首页静态化程序,代码并非站长本人所写,只是在一个项目中看到的。这个方案是将首页内容存入到一个磁盘文件中,需要时从这个文件中取出内容并输出。
这个方案只适用于并发量不高的网站,因为在较高并发量状况下,频繁的进行磁盘IO对于性能影响较大。(高并发的网站可以考虑将内容存入Memcached)
代码如下:
专注WEB编程开发技术
下面这段代码是一个用PHP编写的网站首页静态化程序,代码并非站长本人所写,只是在一个项目中看到的。这个方案是将首页内容存入到一个磁盘文件中,需要时从这个文件中取出内容并输出。
这个方案只适用于并发量不高的网站,因为在较高并发量状况下,频繁的进行磁盘IO对于性能影响较大。(高并发的网站可以考虑将内容存入Memcached)
代码如下:
如果ulimit设置的过小,对于并发量大的网站,可能会出现too many open files的错误。因此需要我们对ulimit设置进行调整,方法如下:
例如apache以www用户身份运行
首先,打开limits.conf文件
vi /etc/security/limits.conf
在末尾加上如下内容:
www soft nofile 32768
www hard nofile 65536
上面两行的含义是:
www – 所指定的用户名
soft – 软限制
hard – 硬限制
nofile – 允许打开的文件数量,后面的数字就是具体的数量。
截取UTF-8编码字符串的方法有很多,我也分享一个:
function cutStr($Str, $Length) { global $s; $i = 0; $l = 0; $ll= strlen($Str); $s = $Str; $f = true; while ($i <= $ll) { if (ord($Str{$i}) < 0x80) { $l++; $i++; } elseif (ord($Str{$i}) < 0xe0) { $l++; $i += 2; } elseif (ord($Str{$i}) < 0xf0) { $l += 2; $i += 3; } elseif (ord($Str{$i}) < 0xf8) { $l += 1; $i += 4; } elseif (ord($Str{$i}) < 0xfc) { $l += 1; $i += 5; } elseif (ord($Str{$i}) < 0xfe) { $l += 1; $i += 6; } if (($l >= $Length - 1) && $f) { $s = substr($Str, 0, $i); $f = false; } if (($l > $Length) && ($i < $ll)) { $s = $s . '...'; break; //如果进行了截取,字符串末尾加省略符号“...” } } return $s; }
打开Apache的httpd.conf文件,分别找到:
错误日志
ErrorLog logs/error_log
修改为
ErrorLog “| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log_%Y%m%d 86400 480”
访问日志
CustomLog logs/access_log common
修改为
CustomLog “| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_%Y%m%d 86400 480” common
优化目标
1、减少 IO 次数
IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。
2、降低CPU计算
在IE9下,FCKeditor的弹出浮动层会出现兼容bug,下面提供一个解决方法:
打开下面这个文件
fckeditor/editor/js/fckeditorcode_ie.js
找到第 38行的这个方法:FCKTools.RegisterDollarFunction
将原来的
FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};
修改方法为:
FCKTools.RegisterDollarFunction=function(A){A.$=function(v){return A.document.getElementById(v);}};
最近一段时间,我刚刚进入一家新公司,并接手了这里的一个站点,由于这个站点的架构设计不太合理,导致MySQL的压力始终很大,经常出现超时的Locked进程,于是编写了一段Linux的Shell脚本来定时kill掉这些进程。
脚本如下:
#!/bin/bash mysql_pwd="xxxxxx" #mysql的root密码 mysql_exec="/usr/local/mysql/bin/mysql" tmp_dir="/tmp" file_sh="$tmp_dir/mysql_kill_locked.sh" file_tmp="$tmp_dir/mysql_kill_locked.tmp" file_log="$tmp_dir/mysql_kill_locked.log" #日志 $mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" > $file_tmp cat $file_tmp >> $file_log for line in `cat $file_tmp | awk '{print $1}'` do echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $file_sh done chmod +x $file_sh sh $file_sh #执行临时脚本 > $file_sh #清空临时脚本
最后,将这段脚本加入到crontab,定时执行即可。
阳光部落原创,更多内容请访问 http://www.sunbloger.com/
Nginx中的Gzip模块,支持在线实时压缩输出数据流。有利于减少访问网站过程中传输的数据量,从而减少带宽资源的占用率。
使用范例
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;
指令详解:
Nginx的rewrite规则与Apache有一些区别,特地找来一些资料,学习一下Nginx的rewrite规则。
正则表达式匹配,其中:
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
最近在把很多应用从Apache转入Nginx下,遇到最棘手的问题莫过于两个平台下rewrite规则的重新调整,下面就拿WordPress为例,和大家分享一下WordPress在多站点模式下,如何配置Nginx中的rewrite规则。
我们在开启WordPress(版本:3.2.1)多站点模式的过程中,会提示我们将一段rewrite写入.htaccess文件中,如下: