存档:linux

博客记忆

四月 23, 2010 | c/c++, js/web, linux, mysql, php, 心情杂记, 数学 | RSS 2.0

很长时间没有更新日志,大概有几个月了,疏于对知识的学习和管理,可能是跟工作有点忙有关系吧,经常顾着不顾那个,放弃了诸多的学习机会,
不过希望以后能恢复,时间是一种财富,能让你积淀更多的对知识的理解,同时也能验证更多的真理,譬如坚持才是硬道理,这两个月坚持的最好的一件事情还算是对自己花销的记录很分类,方法比较土,就是使用网易的邮箱里的一个小插件,有时候别人问你一个月能花多少钱?像我这种不扫一屋的人是一无所知的,统计了下发现对多的是花在了吃上和没周末的超市。
记得以前写博客都是从外面copy一堆东西,可能是自己的知识欠缺的太多,发现一篇技术文章就copy过来,沾沾自喜一番感觉很有成就感,后来发现好多牛人都是自己写博客,发现自己土了,而且写的都是超高技术含量,,而且现在基本上很多的知识获取都是从blog获得的,自己也曾在google reader里面follow了一堆,曾经每天早上9点到公司都花费10分钟时间,不过有点不好,开始没分类好,造成后来好多看的时候乱,杂乱无章的,挑出那种令你很满意的需要去甄选,所以有时候就懒的去看了。
不过一些东西一旦写下来还是能整理下自己的思维的。而且能做下备忘,所以以后需要把这个习惯坚持下去。今天写这个主要是想试试用vim写博客,用的是vimpress插件,下载地址在http://www.vim.org/scripts/script.php?script_id=1953,下来后直接解压到.vim下就可以了,修改blog.vim下的秘密用户还xmlrpc就可以了。ok,here,travel start。

没有评论 »

愚人节的线上事故

四月 2, 2010 | linux | RSS 2.0

线上出现一次线上事故,事故原因很明了,不像以往,下线一款产品失修改js 导致线上出错,被罚了款。当然虽然是昨天的故障,也不是愚人节我故意的,当然主要原因在于自己,我觉得理所当然不会出现问题了,但是事实不是这样。 意识疏忽。

做下警示:

1  晚上尽量不要上线,头昏脑胀的,就我和一位测试工程师。7,8点上线

2 维护别人写过的代码一定要完全理解看明白别人的代码意思。这点很重要。

3 函数命名,事故的原因主要是修改一个函数引起,函数名字叫f();,当时也没看明白,认为既然一本版本下线了,就对应的把这个版本的所有东西删除了就应该对了,既然不做abtest 了,要这个还有啥用,鬼知道函数啥意思,所以干净利落的删除了,也没让测试人员测试其它的页面功能。结果

。。。。。。。。。。

4 ,心理压力太大了 天天进程频繁切换,繁琐的事情太过,心理素质又不行,看来我这个也是搞风险作业啊

1条评论 »

debian上快速安装xcache

一月 5, 2010 | linux, php | RSS 2.0

不用phpize安装了,debian上可以迅速安装上,需要保证你的/etc/apt/sources.list下面是新的。

然后直接 apt-get install php5-xcache

/etc/init.d/apache2 restart

很快就看到结果了。可以用phpinfo看下。

php -r “phpinfo();”|grep “xcache”

/etc/php5/cli/conf.d/xcache.ini,
xcache.admin.enable_auth => On => On
xcache.cacher => On => On
xcache.coredump_directory => no value => no value
xcache.count => 1 => 1
xcache.coveragedump_directory => no value => no value
xcache.coverager => Off => Off
xcache.gc_interval => 0 => 0
xcache.mmap_path => /dev/zero => /dev/zero
xcache.optimizer => On => On
xcache.readonly_protection => no value => no value
xcache.shm_scheme => mmap => mmap
xcache.size => 0 => 0
xcache.slots => 8K => 8K
xcache.stat => On => On
xcache.test => no value => no value
xcache.ttl => 0 => 0
xcache.var_count => 1 => 1
xcache.var_gc_interval => 300 => 300
xcache.var_maxttl => 0 => 0
xcache.var_size => 0M => 0M
xcache.var_slots => 8K => 8K
xcache.var_ttl => 0 => 0

上面的就是配置相关信息,如果xcache_size=0就是关闭xcache的使用

具体配置参数的意义可以参考http://xcache.lighttpd.net/wiki/XcacheIni#XCacheCacher

然后可以做下压力测试,看看结果。

ab -c5 -n3000 http://liufb.kuxun.cn  并发连接为5,3000次请求

具体我用的是sudo ab -n 1000  http://liufb.kuxun.cn/beijing
安装xcache后的
Server Software:        Apache/2.2.9
Server Hostname:        liufb.kuxun.cn
Server Port:            80

Document Path:          /beijing
Document Length:        98026 bytes

Concurrency Level:      1
Time taken for tests:   373.665 seconds
Complete requests:      1000
Failed requests:        974
(Connect: 0, Receive: 0, Length: 974, Exceptions: 0)
Write errors:           0
Total transferred:      97639210 bytes
HTML transferred:       97172210 bytes
Requests per second:    2.68 [#/sec] (mean)
Time per request:       373.665 [ms] (mean)
Time per request:       373.665 [ms] (mean, across all concurrent requests)
Transfer rate:          255.18 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   330  374 191.1    347    3689
Waiting:      139  188 190.8    162    3502
Total:        330  374 191.1    347    3689

Percentage of the requests served within a certain time (ms)
50%    347
66%    352
75%    355
80%    359
90%    374
95%    414
98%    753
99%   1298
100%   3689 (longest request)

Server Software:        Apache/2.2.9
Server Hostname:        liufb.kuxun.cn
Server Port:            80

Document Path:          /beijing
Document Length:        96315 bytes

Concurrency Level:      1
Time taken for tests:   401.374 seconds
Complete requests:      1000
Failed requests:        914
(Connect: 0, Receive: 0, Length: 914, Exceptions: 0)
Write errors:           0
Total transferred:      97633782 bytes
HTML transferred:       97166782 bytes
Requests per second:    2.49 [#/sec] (mean)
Time per request:       401.374 [ms] (mean)
Time per request:       401.374 [ms] (mean, across all concurrent requests)
Transfer rate:          237.55 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   372  401  81.0    390    1504
Waiting:      185  213  80.5    202    1311
Total:        372  401  81.0    390    1504

Percentage of the requests served within a certain time (ms)
50%    390
66%    394
75%    398
80%    400
90%    413
95%    443
98%    561
99%    749
100%   1504 (longest request)

后用webbench测试结果可以看到:

没有安装xcache的测试。
liufb@kooxoo240:~/webbench/webbench-1.5$ webbench -c1000 -t 20 http://liufb.kuxun.cn/
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://liufb.kuxun.cn/
1000 clients, running 20 sec.

Speed=903 pages/min, 318838 bytes/sec.
Requests: 301 susceed, 0 failed.

xcache的测试 xcache.size  =               32M

liufb@kooxoo240:~/webbench/webbench-1.5$ webbench -c1000 -t 20 http://liufb.kuxun.cn/
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://liufb.kuxun.cn/
1000 clients, running 20 sec.

Speed=2388 pages/min, 430682 bytes/sec.
Requests: 796 susceed, 0 failed.

的安装不上可以看

http://www.howtoforge.com/xcache-php5-apache2-debian-etch

没有评论 »

我所理解的博弈论 对策论(game theory)

十一月 12, 2009 | linux | RSS 2.0

记号,准备写

没有评论 »

linux下迁移大文件

十一月 9, 2009 | linux | RSS 2.0

在《high performance mysql 》第二版在书后面的appendix a 讲了作者的一些小技巧,如何迁移大文件。
常见的包括我们的 先gzip下,然后scp过去,然后坐着讲了可以:
gzip -c file |ssh root@server1 “gunzip -c -> xxx” ,利用管道减少读写时间的浪费
两外讲了下使用nc来传入大文件,这样你的文件就不会得到加密:
如在你将要传输到的机器上建立sever nc -l -p 12345|tar xvzf -
在另外一台你
tar cvzf – xx|nc -q l server2 12345
传输速度很快:
rsync—》scp——》nc 传输速度越来越快
man 下nc 发现很牛叉,应该是黑客的必备命令,man页里面描述:nc – TCP/IP swiss army knife
不简单。

没有评论 »

install mysql/pdo for php on debian debian下为php安装mysql pdo

十一月 5, 2009 | linux, mysql | RSS 2.0

debian is not install pdo default ,so i need install this extension,we can use phpsize ,but the simple way is
under this,when i search the method in google ,many chinese blog can’t solve my issues ,google.com is helpful to me .
first way:
# apt-get install dh-make-php dh-make-php
# pecl install pdo
# pecl install pdo_mysql
# pecl install pdo_sqlite
maybe u need excute this commond channel-update pecl.php.net
then config ur php.ini add like this:
extension=pdo.so
extension=pdo_mysql.so
extension=pdo_sqlite.so

then restart apache or nginx
another way:
$ sudo apt-get install php5-dev
$ sudo apt-get install php-pear
$ sudo apt-get install libmysqlclient15-dev
$ sudo pecl install pdo
$ PHP_PDO_SHARED=1 sudo pecl install pdo_mysql

Then, add these lines to php.ini somewhere to activate the new modules:
extension=pdo.so
extension=pdo_mysql.so
third way is to simple
apt-get install php5-common php5-mysql php5-sqlite

I hope that this guide is useful to u .

没有评论 »

mysql replication 自动倒库,启动配置主从库脚本

十一月 1, 2009 | linux, mysql | RSS 2.0

简单的写了一个,可以继续优化调整,需要一个cfont.sh。

#!/bin/bash
FONT="./cfont.sh"
source $FONT &>/dev/null
USERNAME="xxxx"
PASSWD="xxxxxxxx"
HOSTNAME="xxxxxxxxxxxxxx"
 
USERNAME247="xxxxxxxxxxxxxx"
PASSWD247="xxxxxxxxxxxxxxx"
HOSTNAME247="xxxxxxxxxxxxxxxxxxx"
 
DATABASE="xxxxxxxxxxxxxxxxx"
DATABASE247="xxxxxxxxxxxxxxxxxxxxxxxx"
 
DATA=`date '+%Y%m%d%k%M'`
DUMPSQL="dump$DATA.sql"
MASTERLOG="masterposition.log"
MYSQLHOST=" -h$HOSTNAME -u$USERNAME -p$PASSWD"
MYSQLHOST247=" -h$HOSTNAME247 -u$USERNAME247 -p$PASSWD247"
printUsage() {
	cfont -b -red  "Usage: $0" -reset -n
	cfont -b -red "Failed" -reset -n
	cfont -red " --dumptable" -reset -n
	return
}
 
locktable() {
	mysql $MYSQLHOST -e ' FLUSH TABLES WITH READ LOCK;' 
	if [ $? -ne 0 ]
	then
		cfont -b -red " lock table Failed" -reset -n;
		exit 3;
	else
		cfont -b -green "lock table OK" -reset -n;
	fi
}
unlocktable() {
	cfont -b -green "unlock tables" -reset -n;
	mysql $MYSQLHOST -e ' UNLOCK TABLES;' 
	if [ $? -ne 0 ]
	then
		cfont -b -red " unlock table Failed" -reset -n;
		exit 3;
	else
		cfont -b -green "unlock table OK" -reset -n;
	fi
}
 
dumptable() {
	locktable
	cfont -b -green "get master status pos file" -reset -n;
 
	STATUSALL=` mysql $MYSQLHOST -e 'show master status ;'|awk '{print $1,$2}'`
	STATUSFILE=`echo $STATUSALL|awk '{print $3}'`
	STATUSPOS=`echo $STATUSALL|awk '{print $4}'`
 
	cfont -b -green "start dump database" -reset -n;
	#mysqldump --opt $MYSQLHOST $DATABASE247 >$DUMPSQL 
	if [ $? -ne 0 ]
	then
		cfont -b -red "dump database  Failed" -reset -n;
		exit 3;
	else
		cfont -b -green "dump database  OK" -reset -n;
	fi
 
	unlocktable
	#unlock t ables
	cfont -b -green "start dump sql to $HOSTNAME247" -reset -n;
	mysql $MYSQLHOST247 -e "stop slave"
	mysql $MYSQLHOST247  $DATABASE247 < dump200910231804.sql ;
	echo $STATUSFILE $STATUSPOS >> $MASTERLOG
	mysql $MYSQLHOST247 -e "change master to master_host='$HOSTNAME247', master_port=3306,master_user='replication',master_password='replication',master_log_file='$STATUSFILE',MASTER_LOG_POS=$STATUSPOS"
	startslave
 
}
startslave() {
 
	mysql $MYSQLHOST247  -e "start slave"
 
	RESULT=`mysql $MYSQLHOST247 -e 'show status like "Slave_running"' -ss | awk '{print $2}'`
	if [ "$RESULT" == 'ON' ]
	then
		echo -e "$HOSTNAME247    Slave is running!"
	else
		echo -e "$HOSTNAME247    Slave is not running!"
	fi
 
}
if [ $# -eq 0 ] ; then
	printUsage
	exit 1
fi
 
case $1 in
	--dump) dumptable;;
	--help) printUsage; exit 1;;
	*) printUsage; exit 1;;
esac

没有评论 »

mysql的优化数据库两种方法,脚本

十一月 1, 2009 | linux, mysql | RSS 2.0

我说的优化就是简单的用optimize table

1 第一种方法就是脚本,本来自己写了一个,但是后来在网上发现了一个可以优化所有库的,还是比较好的,可以看下

用了sed和awk:

#################################################
#!/bin/sh
 
# this shell script finds tables and runs 'optimize table'
# @date 6/14/2006
# @author Son Nguyen
# @modified by Matt Rae 7/7/2006
 
MYSQLCONFIG="-hxxxxxxxxxx -uxxxxxxxxxxxxx -pxxxxxxxxxxxxxxxx "
printUsage() {
	echo "Usage: $0"
	echo " --optimize"
	return
}
 
 
doAllTables() {
	DBNAMES=`mysql $MYSQLCONFIG -e "SHOW DATABASES\G;" | grep 'Database' | sed -n 's/Database: //p'`
	for DBNAME in $DBNAMES
	do
		# get the table names
		TABLENAMES=`mysql $MYSQLCONFIG -D $DBNAME -e "SHOW TABLES\G;"|grep 'Tables_in_'|sed -n 's/.*Tables_in_.*: \([_0-9A-Za-z]*\).*/\1/p'`
 
		# loop through the tables and optimize them
		for TABLENAME in $TABLENAMES
		do
			mysql $MYSQLCONFIG -D $DBNAME -e "OPTIMIZE TABLE $TABLENAME;"
		done
	done
}
 
if [ $# -eq 0 ] ; then
	printUsage
	exit 1
fi
 
case $1 in
	--optimize) doAllTables;;
	--help) printUsage; exit 1;;
	*) printUsage; exit 1;;
esac


第二种方法就是巧用数据库里面的表信息,如下:
mysql xxxx -e “select concat(’optimize table ‘,table_schema,’.',table_name,’;') into outfile
‘/u01/data/opti.sql’ from,<<< information_schema.ta<

cat /u01/data/opti.sql optimize table test.test; optimize table test.test2; optimize table test.zzz; mysql -u sg -p’xxxx’ < /u01/data/opti.sql test.test optimize status OK Table Op Msg_type Msg_text test.test2 optimize status OK Table Op Msg_type Msg_text 另外也可以用一个mysql的工具用perl写的,mk-find ,可以一下搞定,前几天在搞msql,数据库同步的时候遇到了一个号的工具Maatkit这个工具,有很多使用工具,国内很少人用,dba比本工具,好多使用的命令,倒库的比mysqldump快好多,多线程的运行。国内的http://www.bigheaddba.net/这个博客有较为详细的介绍

没有评论 »

09年北京图书节淘宝记

十月 17, 2009 | linux | RSS 2.0

昨天去图书节逛了逛,由于地坛离我们这里很近,每次地铁有什么服装节,图书节,甚至年终的庙会等,我一般都会去,尽管去买东西还得买门票,里面有适合可以淘得一些性价比比较高的物品,特别是书籍,服装节里面的衣服一般不怎么样,买过一次,以后还是尽量去专卖店去买。图书还是能找到一些比较好的,一些古玩,新的生活用品也比较多。这次去有幸淘得了几幅画,20元一副,比较值,如果去店里买,远不止这些,甚至有些作品上千,还是比较值得的,买了一只hero的钢笔15元,一套《上帝的指纹》每本5元,共10元,看了看纸张还是比较好的,一本《徐志摩的诗文名篇》 5元,两本英文的背诵名篇,部分彩纸的还是比较好的。多举办些这样的活动还是很实用的。供货的多了,人流也多,于是也就实现了双赢,其实也是三方都盈利,譬如举办方即收取商家的摊费,还要地坛的门票涨到了5元,商家自然更能赚钱,据说上年庙会的时候一个羊肉串的短短几天卖出了几十万,我去买了一串好像是10元,也没用什么好吃的,不过排队的人是源源不断啊。我们这些人去逛,既能开开眼光,也能发掘下自己深层次的需求。

没有评论 »

批量替换文件夹下所有文件内容脚本(shell,php,python)

九月 14, 2009 | linux, php, python | RSS 2.0

批量替换一个文件夹下的字符或者其他的应该经常可以见到,近期读《卓有成效的程序员》有点感触,他提到了一些可以加快工作效率的容易让人忽略的小细节,加速法则,专注法则,自动化 法则,规范化法则。那这个批量替换应该属于自动化法则,有时候文件特别多的是很,替换是个非常容易烦人的事情。显然这些应该是计算机做的事情,下面给出以上三个版本:

shell:

sed跨行需要使用参数:N等控制,这里不适用,忘记。

shell学了个皮也不皮,毛也不毛

 
for i in `find . -name "*.html"`
do
sed "s|&lt;\!--{if \!empty(\$this-&gt;_visiteduser-&gt;_gender)&amp;&amp; \(\$this-&gt;_visiteduser-&gt;_gender\)=='m'}--&gt;他&lt;\!--{else}--&gt; 她&lt;\!-  -{/if}--&gt;|{\1}|g" $i &gt; $i-new
mv $i $i-old
mv $i-new $i
done

当然你可以用sed的i直接替换,尽量替换前做个备份。

python的批量替换脚本:

刚开始学写的特别烂:

import os
import re
def getHtmlFile(rootdir):
allfile=[]
for   parent, dirnames, filenames   in   os.walk(rootdir):
for   filename   in   filenames:
#if os.path.isfile(os.path.join(0)
allfile.append(os.path.join(parent, filename))
return allfile
 
def replace(filename):
file_object = open(filename)
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
'''
grouped_word = re.compile('&lt;div id="header"&gt;([\s\S]*)?&lt;/div&gt;')
all_the_text = re.sub(r'xxxxxxxxxxxxxxxxxx',all_the_text);
'''
all_the_text = re.sub('&lt;div id="header"&gt;[\s\S]+?&lt;/div&gt;','header',all_the_text);
all_the_text = re.sub('&lt;div id="footer"&gt;[\s\S]+?&lt;/div&gt;','footer',all_the_text);
#all_the_text = re.sub('\r','',all_the_text);
open(filename, 'w').write(all_the_text)
 
file=getHtmlFile('/home/liufb/studypython/gonglue');
test = re.compile("\.html$", re.IGNORECASE)
file = [f for f in file if test.search(f)]
for i in file:
print i+"\n"
replace(i)

学的时间相对比较长,但是依旧比较烂:

function changefile($filename) {
global $text1;
global $text2;
$file = file_get_contents($filename);
$file2 = preg_replace('@&lt;div id="header"&gt;([\s\S]*)?&lt;/div&gt;@iU',$text1,$file);
$file3 = preg_replace('@&lt;div id="footer"&gt;([\s\S]*)?&lt;/div&gt;@iU',$text2,$file2);
$file3 = preg_replace('@\r@iu','',$file3);
file_put_contents($filename,$file3);
 
}
function getFile($dirname) {
if ($handle = opendir($dirname)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." &amp;&amp; $file != "..") {
$file=$dirname.'/'.$file;
if(is_file($file) &amp;&amp; substr($file,-5) =='.html') {
//echo $file."\n";
 
changefile($file);
}else if(is_dir($dirname.'/'.$file)) {
$dirscan = realpath($file);
//$dirscan = $dirname.'/'.$file;
//echo $dirscan."\n";
getFile($dirscan);
}
}
}
}
closedir($handle);
}
getFile('.');

没有评论 »