Monthly Archives: July 2011
Apache下实现隐藏服务器名称
我这里用的是FreeBSD的操作系统的.用curl 命令查看文件头
为了安全起见,我们需要将FreeBSD字样及其它信息隐藏起来.操作如下:
在httpd.conf文件里添加以下两行
ServerTokens Prod
ServerSignature Off
重启apache即可. Continue reading
性能测试工具sysbench简介
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。
下载
http://sourceforge.net/projects/sysbench/
编译安装
默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数
./configure --prefix=/u01/sysbench \ --with-mysql-includes=/opt/mysql/include/mysql \ --with-mysql-libs=/opt/mysql/lib/mysql make && make install
mongodb中实现自定义自增ID
PHP代码:
function get_autoincre_id($name, $db){
$update = array('$inc'=>array("id"=>1));
$query = array('table_name' => $name);
$command = array(
'findandmodify'=>'autoincre_system', 'update'=>$update,
'query'=>$query, 'new'=>true, 'upsert'=>true
);
$id = $db->command($command);
return $id['value']['id'];
}
其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值.
$conn = new Mongo();
$db = $conn->cms;news_max_id = get_autoincre_id(‘tbl_news’); //从1开始
soft_max_id = get_autoincre_id(‘tbl_soft’); //从1开始
现在就可以直接在写入新记录的时候使用这个id值了.
其具体实现方式主要是利用MongoDB中findAndModify命令,
修改window下dos窗口的编码为utf8
在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。
如果想正确显示UTF-8字符,可以按照以下步骤操作:
1、打开CMD.exe命令行窗口
2、通过 chcp命令改变代码页,UTF-8的代码页为65001
chcp 65001
执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。 Continue reading
MongoDB的ObjectId
突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。
下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个”_id”建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。
当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key
> db.t_test.insert({“name”:”cyz”})
> db.t_test.findOne({“name”:”cyz”})
{ “_id” : ObjectId(“4df2dcec2cdcd20936a8b817”), “name” : “cyz” }
服务器出现-由注册表引起的I/O操作发生了不可恢复的错误 的解决方法
昨天一台服务器的80端口突然不行了,3389虽然通,但连接不上,其它的3306和21端口都正常的.初步怀疑是系统资源不足引起的.第二天让机房检查,最后没有办法重启解决了.
服务器出现此问题:
很多使用Windows Server 2003系统的用户都会收到如下错误:
事件类型: 错误
事件来源: Application Popup
事件种类: 无
事件 ID: 333
日期: 2007-8-11
事件: 8:48:03
用户: N/A
计算机: LZ_YQ
描述:
由注册表引起的 I/O 操作发生了不可恢复的错误。 注册表将不能读取、写出或刷新包含注册表系统图像的其中一个文件。
然后系统失去响应,需要重新启动。
事件ID是333,英文日志为:
Event Type: Error
Event Source: Application Popup
Event Category: None
Event ID: 333
Date: date
Time: time
User: N/A
Computer: computer name
Description: An I/O operation initiated by the Registry failed unrecoverably. The Registry could not read in, or write out, or flush, one of the files that contain the system’s image of the Registry.
该错误原因是:在非分页内存或在分页的池内存不足暂时可能会出现此问题。 系统保留录制类事件,直到重新启动计算机时或相关的配置单元是卸载,即使在临时内存 insufficiency 停止。
请参看如下kb,由于该补丁处于测试阶段,因此需要通过邮件下载对应补丁:
http://support.microsoft.com/kb/970054
利用taskset有效控制cpu资源
常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;
这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;
查看系统下cpu信息:
#cat /proc/cpuinfo
taskset就可以帮我们完成这项工作,而且操作非常简单;
该工具系统默认安装,rpm包名util-linux Continue reading
iptables 开放80端口
iptables -F //清空规则
iptables -A INPUT -p tcp –dport 22 -j ACCEPT /*允许包从22端口进入*/
iptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT /*允许从22端口进入的包返回*/
iptables -A OUTPUT -p udp –dport 53 -j ACCEPT
iptables -A INPUT -p udp –sport 53 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /*允许本机访问本机*/
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 –dport 80 -j ACCEPT /*允许所有IP访问80端口*/
iptables -A OUTPUT -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables /*保存配置或者使用命令 service iptables save */
iptables -L
上面的80和22可以简写成:
[shell]/sbin/iptables -I INPUT -p tcp –dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp –dport 22 -j ACCEPT [/shell]
禁止192.168.0.7连接memcached
[shell]iptables -A INPUT -s 192.168.0.7 -p tcp –dport 11211 -j DROP[/shell]
只允许指定ip访问指定的端口
iptables -A INPUT -s 74.82.164.142 -p tcp –dport 9306 -j ACCEPT
iptables -A INPUT -p tcp –dport 9306 -j DROP # 如果在iptables表最下面有一条拒绝所有规则以外的规则的话,则这行不用写。
linux下网站排障分析常用的命令
系统连接状态篇:
1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或 netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"t",state[key]}' netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"t",arr[k]}' netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c 2.查找请求数请20个IP(常用于查找攻来源):