August 2, 2011
nagios访问apache权限问题解决
"\u003cp\u003eIt appears as though you do not have permission to view information for any of the services you requested…\u003c/p\u003e\n\u003cp\u003e打开cgi.cfg配置文件,里面有个参数:\u003c/p\u003e\n\u003cp\u003euse_authentication=1\u003c/p\u003e\n\u003cp\u003e为了保障系统的安全性,nagios设置了这个参数,默认为1,改为0即可\u003c/p\u003e\n\u003cp\u003e1.装了几次,换了几个版本的系统,脑袋都大了,终于解决了\u003c/p\u003e\n\u003cp\u003enrpe在 ./configure时提示\u003c/p\u003e\n\u003cp\u003echecking for SSL… configure: error: Cannot find ssl libraries\u003c/p\u003e\n\u003cp\u003e把openssl-devel装上就可以了\u003c/p\u003e\n\u003cp\u003e2.nagios web界面提示\u003c/p\u003e\n\u003cp\u003eIt appears as though you do not have permission to view information for any of the services you requested…\u003c/p\u003e\n\u003cp\u003e打开cgi.cfg配置文件,里面有个参数:\u003c/p\u003e\n\u003cp\u003euse_authentication=1\u003c/p\u003e\n\u003cp\u003e为了保障系统的安全 …\u003c/p\u003e"
August 1, 2011
理解Linux系统负荷
"\u003cp\u003e\u003cstrong\u003e一、查看系统负荷\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。\u003c/p\u003e\n\u003cp\u003e在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。(另外,它们在苹果公司的Mac电脑上也适用。)\u003c/p\u003e\n\u003cp\u003e你在终端窗口键入uptime,系统会返回一行信息。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2011/08/3c61c58dd6bbd277cc8c71cabb97e277.png\" alt=\"bg2011073001\"\u003e\u003c/p\u003e\n\u003cp\u003e这行信息的后半部分,显示”load average”,它的意思是”系统的平均负荷”,里面有三个数字,我们可以从中判断系统负荷是大还是小。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2011/08/b639ca5e9954b512d726cb480644fbdc.png\" alt=\"bg2011073003\"\u003e\u003c/p\u003e\n\u003cp\u003e为什么会有三个数字呢?你从手册中查到,它们的意思分别是1分钟、5分钟、15分钟内系统的平均负荷。\u003c/p\u003e\n\u003cp\u003e如果你继续看手册,它还会告诉你,当CPU完全空闲的时候,平均负荷为0;当CPU工作量饱和的时候,平均负荷为1。\u003c/p\u003e\n\u003cp\u003e那么很显然,”load average”的值越低,比如等于0.2或0.3,就说明电脑的工作量越小,系统负荷比较轻。\u003c/p\u003e\n\u003cp\u003e但是,什么时候能看出系统负荷比较重呢?等于1的时候,还是等于0.5或等于1.5的时候?如果1分钟、5分钟、15分钟三个值不一样,怎么办?\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、一个类比\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e判断系统负荷是否过重,必须理解load average的真正含义。下面,我根据” \u003ca href=\"http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\"\u003eUnderstanding Linux …\u003c/a\u003e\u003c/p\u003e"
July 31, 2011
Apache下实现隐藏服务器名称
"\u003cp\u003e我这里用的是FreeBSD的操作系统的.用curl 命令查看文件头\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name_0.jpg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name_0.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e为了安全起见,我们需要将FreeBSD字样及其它信息隐藏起来.操作如下:\u003c/p\u003e\n\u003cp\u003e在httpd.conf文件里添加以下两行\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eServerTokens Prod\nServerSignature Off\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e重启apache即可.\u003c/p\u003e\n\u003cp\u003e如图所示:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name.jpg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e"
July 29, 2011
性能测试工具sysbench简介
"\u003cp\u003e\u003ca href=\"http://sysbench.sourceforge.net/\"\u003esysbench\u003c/a\u003e是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e下载\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e**\n编译安装**\n默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e./configure --prefix=/u01/sysbench \\\n--with-mysql-includes=/opt/mysql/include/mysql \\\n--with-mysql-libs=/opt/mysql/lib/mysql\n\nmake \u0026amp;\u0026amp; make install\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e参数\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eNinGoo:/u01/sysbench/bin\u0026gt;$sysbench\nMissing required command argument.\nUsage:\n sysbench …\u003c/code\u003e\u003c/pre\u003e"
July 28, 2011
mongodb中实现自定义自增ID
"\u003cp\u003ePHP代码:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efunction get_autoincre_id($name, $db){\n\t$update = array(\u0026#39;$inc\u0026#39;=\u0026gt;array(\u0026#34;id\u0026#34;=\u0026gt;1));\n\t$query = array(\u0026#39;table_name\u0026#39; =\u0026gt; $name);\n\t$command = array(\n\t\t\u0026#39;findandmodify\u0026#39;=\u0026gt;\u0026#39;autoincre_system\u0026#39;, \u0026#39;update\u0026#39;=\u0026gt;$update,\n\t\t\u0026#39;query\u0026#39;=\u0026gt;$query, \u0026#39;new\u0026#39;=\u0026gt;true, \u0026#39;upsert\u0026#39;=\u0026gt;true\n\t);\n\t$id = $db-\u0026gt;command($command);\n\treturn $id[\u0026#39;value\u0026#39;][\u0026#39;id\u0026#39;];\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$conn = new Mongo(); …\u003c/p\u003e\u003c/blockquote\u003e"
July 27, 2011
修改window下dos窗口的编码为utf8
"\u003cp\u003e在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。\u003c/p\u003e\n\u003cp\u003e如果想正确显示UTF-8字符,可以按照以下步骤操作:\u003c/p\u003e\n\u003cp\u003e1、打开CMD.exe命令行窗口\u003c/p\u003e\n\u003cp\u003e2、通过 chcp命令改变代码页,UTF-8的代码页为65001\u003c/p\u003e\n\u003cp\u003echcp 65001\u003c/p\u003e\n\u003cp\u003e执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。\u003c/p\u003e\n\u003cp\u003e3、修改窗口属性,改变字体\u003c/p\u003e\n\u003cp\u003e在命令行标题栏上点击右键,选择”属性”-\u0026gt;”字体”,将字体修改为True Type字体”Lucida Console“,然后点击确定将属性应用到当前窗口。\u003c/p\u003e\n\u003cp\u003e这时使用type命令就可以显示UTF-8文本文件的内容了:\u003c/p\u003e\n\u003cp\u003etype filename.txt\u003c/p\u003e\n\u003cp\u003e4、通过以上操作并不能完全解决问题,因为显示出来的内容有可能不完全。可以先最小化,然后最大化命令行窗口,文件的内容就完整的显示出来了。\u003c/p\u003e"
July 27, 2011
MongoDB的ObjectId
"\u003cp\u003e前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的。\u003c/p\u003e\n\u003cp\u003e突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。\u003c/p\u003e\n\u003cp\u003e下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个”_id”建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。\u003c/p\u003e\n\u003cp\u003e当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e db.t_test.insert({“name”:”cyz”})\u003c/p\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e db.t_test.findOne({“name”:”cyz”})\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e{ “_id” : …\u003c/p\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e"
July 27, 2011
服务器出现-由注册表引起的I/O操作发生了不可恢复的错误 的解决方法
"\u003cp\u003e昨天一台服务器的80端口突然不行了,3389虽然通,但连接不上,其它的3306和21端口都正常的.初步怀疑是系统资源不足引起的.第二天让机房检查,最后没有办法重启解决了.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e服务器出现此问题:\n很多使用Windows Server 2003系统的用户都会收到如下错误:\n事件类型: 错误\n事件来源: Application Popup\n事件种类: 无\n事件 ID: 333\n日期: 2007-8-11\n事件: 8:48:03\n用户: N/A\n计算机: LZ_YQ\n描述:\n由注册表引起的 I/O 操作发生了不可恢复的错误。 注册表将不能读取、写出或刷新包含注册表系统图像的其中一个文件。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e然后系统失去响应,需要重新启动。\u003c/p\u003e\n\u003cp\u003e事件ID是333,英文日志为:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eEvent Type: Error\nEvent Source: Application Popup\nEvent Category: None\nEvent ID: 333\nDate: date\nTime: time\nUser: N/A\nComputer: computer name\nDescription: An I/O operation …\u003c/p\u003e\u003c/blockquote\u003e"
July 26, 2011
利用taskset有效控制cpu资源
"\u003cp\u003e常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;\u003c/p\u003e\n\u003cp\u003e这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;\u003c/p\u003e\n\u003cp\u003e查看系统下cpu信息:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#cat /proc/cpuinfo\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003etaskset就可以帮我们完成这项工作,而且操作非常简单;\u003c/p\u003e\n\u003cp\u003e该工具系统默认安装,rpm包名util-linux\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#taskset --help\ntaskset (util-linux 2.13-pre7)\nusage: taskset [options] [mask | cpu-list] [pid | cmd [args...]]\nset or get the affinity of a process\n\n-p, --pid operate on existing given pid\n-c, --cpu-list …\u003c/code\u003e\u003c/pre\u003e"
July 25, 2011
iptables 开放80端口
"\u003cp\u003eiptables -F //清空规则\u003c/p\u003e\n\u003cp\u003eiptables -A INPUT -p tcp –dport 22 -j ACCEPT /*允许包从22端口进入*/\niptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT /*允许从22端口进入的包返回*/\niptables -A OUTPUT -p udp –dport 53 -j ACCEPT\niptables -A INPUT -p udp –sport 53 -j ACCEPT\niptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /*允许本机访问本机*/\niptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT\niptables -A INPUT -p tcp -s 0/0 –dport 80 -j ACCEPT /*允许所有IP访问80端口*/\niptables -A OUTPUT -p tcp –sport 80 -m state …\u003c/p\u003e"
July 24, 2011
linux下网站排障分析常用的命令
"\u003cp\u003e\u003cstrong\u003e系统连接状态篇:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e1.查看TCP连接状态\nnetstat -nat |awk \u0026#39;{print $6}\u0026#39;|sort|uniq -c|sort -rn\nnetstat -n | awk \u0026#39;/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}\u0026#39; 或\nnetstat -n | awk \u0026#39;/^tcp/ {++state[$NF]}; END {for(key in state) print key,\u0026#34;t\u0026#34;,state[key]}\u0026#39;\nnetstat -n | awk \u0026#39;/^tcp/ {++arr[$NF]};END {for(k in arr) print k,\u0026#34;t\u0026#34;,arr[k]}\u0026#39;\nnetstat -n |awk \u0026#39;/^tcp/ {print $NF}\u0026#39;|sort|uniq -c|sort -rn\nnetstat -ant | awk \u0026#39;{print $NF}\u0026#39; | grep -v \u0026#39;[a-z]\u0026#39; | …\u003c/code\u003e\u003c/pre\u003e"
July 22, 2011
隐藏 Apache & PHP 的版本号
"\u003cp\u003e有朋友问起,如何隐藏 HTTP header 中发送包含在 Server 信息里面的 Apache 和 PHP 版本号(譬如我们可以到 Firefox 的附加工具里面找 Live HTTP Headers;还可以用curl -I IPaddress|http://域名 ) 下面是做法:\n\u003cstrong\u003eApache:\u003c/strong\u003e\n打开 httpd.conf,在文件最后加入以下代码:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e#Hidden I can with apache version number\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eServerTokens ProductOnly\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eServerSignature Off\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003ePHP:\u003c/strong\u003e\n隐藏 PHP 版本就是隐藏类似于 “X-Powered-By: PHP/5.1.2-1+b1” 这个,开启 php.ini,加入:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eexpose_php = Off\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e设置了expose_php=Off后,用phpinfo查看的时候,页面上原来正常显示的图片会消失隐藏的.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e相关:\u003c/em\u003e\u003c/p\u003e"
July 22, 2011
squid缓存php动态文件
"\u003cblockquote\u003e\n\u003cp\u003eacl QUERY urlpath_regex cgi-bin ?\nno_cache deny QUERY\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e这段代码会不cache 所有带 cgi-bin 和 ? 的url path.表面看来,如果url 里面不带?还是可以被缓存的。可惜实际并非如此,squid 会根据header读取httpd的声明信息,例如生成时间等信息;实际上.php的页面不返回 last-modified 信息,因此很难被cache。\u003c/p\u003e\n\u003cp\u003e通过增加 php 的last-modified header强制 squid 的cache功能:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eheader(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003eheader要放在所有.php文件中去。换而言之,就是要\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e在 include.php中,构造一个当前时间转换为最近那次5分钟/n分钟划分的时间函数\u003c/li\u003e\n\u003cli\u003e把这个时间函数的结果返回到 header\u003c/li\u003e\n\u003cli\u003e在所有页面中调用这个 include\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e以上方法本人已经测试通过.\u003c/p\u003e\n\u003cp\u003e分别是加last-modified …\u003c/p\u003e"
July 22, 2011
使用sed处理php-fpm.conf和nginx.conf文本里的注释信息
"\u003cp\u003e默认系统环境安装教程: \u003ca href=\"http://blog.haohtml.com/archives/6051\"\u003ehttp://blog.haohtml.com/archives/6051\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ephp-fpm.conf:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e想自己搞一个自动修改php-fpm.conf的shell脚本.刚安装的php,默认的是nobody用户运行的,这里修改为了www,并去掉了两边的注释符\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003esed ‘63,66s/|–\u0026gt;//g’ php-fpm.conf | sed ‘s/nobody/www/g’\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e上面将”“和”–\u0026gt;“两个字符串全部删除了.多个之间用”|“符号隔开\u003c/p\u003e\n\u003cp\u003es前面的63,66为处理的行号,如果为一行的话,直接指定一个行号就可以了.这里使用了从63行到66行中间的数据,包括这两行.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003enginx.conf\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e下面的命令是用来配置nginx.conf文件的\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esed \u0026#39;2s/nobody/www/\u0026#39; /usr/local/nginx/conf/nginx.conf.default | sed \u0026#39;2s/#//g\u0026#39;| sed \u0026#39;64,71s/#//g\u0026#39; | sed …\u003c/code\u003e\u003c/pre\u003e"