自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (5)
  • 收藏
  • 关注

原创 Apache+SVN-让用户自行修改SVN密码

<br />上一篇提到了在Ubuntu下搭建Apache+SVN服务,今天写了一个简单的PHP脚本支持用户自行修改SVN密码(假设这个脚本位于/var/www-ssl/svntools/svnpass.php目录下)<br /> <br />首先,用户在修改密码之前需要先登录,而登录的验证方法和访问SVN是一样的,在/etc/apache2/mods-available/alias.conf中加入如下配置<br />Alias /svntools/ "/var/www-ssl/svntools/"<

2011-05-02 19:02:00 8874 3

原创 Ubuntu下搭建Apache+SVN服务

最近和朋友合作一个小项目,于是在VPS(Ubuntu 10.04 LTS 64bit)上搭建了一个Apache+SVN服务便于管理代码,记录如下。1. 安装sudo apt-get install subversionsudo apt-get install libapache2-svn2. 创建subversion用户组,并把apache运行用户www-data加入到subversion用户组中sudo addgroup subversionsudo usermod -G subversion -

2011-05-02 11:55:00 3649

原创 初试memcacheq

今天在拜读新浪微博架构师Tim在QCon Beijing 2010上的演讲的时候了解到新浪微博大规模使用memcacheq作为消息队列,正好公司最近在评估一些MQ的产品,就简单尝试了一下。按照官方的说法,memcacheq有五大优势:1. 无与伦比的简单2. 非常快3. 支持多个队列4. 高并发性5. 与memcache协议兼容安装和启动请参考这里,需要bdb和libevent。基于libmemcached简单写了一个小程序测试了一下,的确很简单,producer利用memcached_set发

2011-02-25 17:42:00 6060

原创 MongoDB学习笔记5 - 测试查询性能

大规模数据导入实验在上一个实验中,我们测试了导入数据的性能,简单总结一下测试方法:1. Schema: 每行数据三个字段,日期、ID和当日流量,都是长整型2. Index: inventory.create_index([('date',ASCENDING), ('id',ASCENDING)], unique=False, dropDups=False)3. 用mongoimport导入csv数据随后我们在大规模的数据上进行了测试,导入360天的数据,每天100万行记录。同样的数据导入两次,由于索

2011-02-24 13:53:00 2318

原创 MongoDB学习笔记4 - MongoDB数据导入实验(mongoimport)

<br />昨天比较了一下在某个特定应用中MongoDB和MySQL导入数据的性能,但是MongoDB的测试结果并不能令人满意,今天继续尝试了几种导入数据的方法,希望提升数据导入性能。<br /> <br />在昨天的实验中,是以id随机的顺序插入数据的,由于我们在id这个属性上面建立了递增索引,因此首先怀疑的是由于id无序造成后面插入的数据有可能导致前面已经插入的数据移动位置,所以第一个实验把插入顺序改成按id赠序。但结果没有什么变化,插入一百万条数据用了1422秒(比昨天按id随机顺序插入还慢了点,

2011-02-22 15:08:00 14090 2

原创 MongoDB学习笔记3 - MongoDB vs MySQL

<br />今天通过一个实验比较了一下MongoDB和MySQL的性能,注意这个比较只反映了我们这个应用场景下的情况,并不能代表普遍的情况。<br /> <br />我们希望存储一些视频历史上的流量,需要存1年的时间,每天活跃的视频在百万数量级,流量用整型表示就可以了。在我们的应用中,写性能是优先考虑的因素,所以第一步的实验主要比较写入的性能,由于存储的数据是被单一应用(进程)独享的,sqlite也满足我们的应用场景,因此我们同时也测试了sqlite的写入性能。<br /> <br />实验环境:<br /

2011-02-22 00:03:00 5115

原创 通过swappiness内核参数调节swap使用

今天跟同事学了一招,可以通过修改swappiness内核参数,降低系统对swap的使用,从而提高系统的性能。遇到的问题是这样的,新版本产品发布后,每小时对内存的使用会有一个尖峰,这个峰值还远没有到达服务器的物理内存。可是确发现内存使用达到峰值时系统开始使用swap,在swap的过程中系统性能会有所下降,表现为较大的服务延迟。对这种情况,可以通过调节swappiness内核参数降低系统对swap的使用,从而避免不必要的swap对性能造成的影响。这里有一篇关于swappiness内核参数的详细介绍。简单地说

2011-02-12 23:02:00 8117

原创 一个简单的python sqlite wrapper

直接上代码,需要注意的是当执行插入更新操作是尽量使用execute_batch。sqlite执行事务操作的开销是很大的,所以应尽量减少执行commit的次数。我做了一个简单的实验,插入1百万行的数据(每行三列INT型数据),一条一条插入需要半个小时,而以128K为一个batch批量插入只需要3分钟。try:    import sqlite3 as sqliteexcept:    from pysqlite2 import dbapi2 as sqliteclass SqliteWrapper

2011-02-07 00:19:00 2326

原创 MongoDB学习笔记2 - 配置python开发环境

1. 安装pymongogit clone git://github.com/mongodb/mongo-python-driver.git pymongocd pymongo/python setup.py install2. 测试pymongo>>> from pymongo import *>>> conn = Connection()>>> db = conn['test']>>> col = db['foo']>>> col.insert({'a':1})ObjectId(

2011-02-05 22:57:00 1875

原创 MongoDB学习笔记1 - 安装和启动

<br />最近在学习MongoDB,做一些笔记<br /> <br />安装:<br />1. 下载<br />    有32位和64位两个版本,32位版本存储的数据量有2GB的限制,建议选择64位版本。最新的release版本号是1.6.5<br />    wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz<br />2. 解压<br />    tar -xzvf mongodb-linux-x86_64-1.6.5

2011-01-24 23:26:00 1836

原创 利用strace诊断程序错误

<br />最近在调试程序的时候接触到了strace这个工具。strace是一个十分强大的调试/分析/诊断工具,这里有一篇详细的介绍。<br /> <br />今天在配置lighty + web.py的时候遇到了问题,按照http://webpy.org/cookbook/fastcgi-lighttpd/进行配置后lighty无法正常启动,从lighty的error log看是加载处理fcgi的python模块时出了问题,但是不知道具体原因。尝试了几次以后决定用strace试一试:<br />

2011-01-04 17:47:00 1069

转载 转一篇Ubuntu 服务器版 Iptables 基本设置指南

昨天装pptpd的时候用到了iptables,稍微学习了一下,转一篇Ubuntu 服务器版 Iptables 基本设置指南。

2010-12-28 12:09:00 749

原创 Shell脚本中滤掉"ssh -t"执行命令时返回的/r字符

今天在写一个shell脚本的时候遇到了一个很诡异的问题。需求很简单,在一台远程的服务器上的某个特定目录下找到最新的文件并scp到本地。一开始写的脚本大概是这样的:#!/bin/shTMPDIR=xxxSERVER=xxxDATDIR=xxxmkdir -p $TMPDIRrm $TMPDIR/* -rfFILES=`ssh $SERVER -t "ls $DATDIR -t | head -n2"`for FILE in $FILES; do    scp $SERVER:$DA

2010-09-19 18:06:00 2373

转载 转一篇SSH Public Key的配置方法

http://sial.org/howto/openssh/publickey-auth/

2010-09-17 15:15:00 1245

原创 GDB下显示完整的长字符串

<br />GDB下用p看一个字符串的时候默认显示是截断的,可以通过set print element 0命令显示完整的字符串。<br /> <br />(gdb) p this->content_->rd_ptr()<br />$1 = 0x1e30a20 "<?xml version=/"1.0/" encoding=/"UTF-8/"?>/r/n<adRequest customId=/"/" networkId=/"2100/" proxied=/"false/" responseFormat=

2010-09-08 19:16:00 26565

原创 如何解析超长的protobuf

在调用protobuf的ParseFromString(str)方法时,默认情况下,如果str的长度>64MB,会返回失败。http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/reference/cpp/google.protobuf.io.coded_stream.html#CodedInputStream.SetTotalBytesLimit.details这里给出了解释,主要是出于安全因素的考虑。可以通过SetTotalBytesLi

2010-09-08 14:09:00 8090

原创 MySQL DATETIME类型和Timestamp之间的转换

<br />DATETIME -> Timestamp: UNIX_TIMESTAMP(...)<br />Timestamp -> DATETIME: FROM_UNIXTIME(...)<br /> <br />mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()));<br />+--------------------------------------+<br />| FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) |<

2010-09-06 14:30:00 42037

原创 当vim遇上C++

俗话说,“工欲善其事,必先利其器“,好的开发工具可以帮我们大大地提高开发效率。用vim在linux下写C++有一段时间了,这里想把自己正在用的一些vim插件和大家分享一下 1. Alternate (http://www.vim.org/scripts/script.php?script_id=31)在对应的头文件和代码文件中快速地切换安装:(1) 下载a.vim到~/.vim/plugi

2009-02-15 01:30:00 7563 2

原创 Linux下如何查看进程打开的文件以及修改进程打开文件数上限

1. 查看进程打开文件在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件。2. 修改进程打开文件数上限Linux默认的进程打开文件上限是1024个,可以通过ulimit -n查看。很多系统上限可以通过修改/etc/security/limits.con

2008-11-11 01:06:00 6345

原创 Redhat Linux下如何生成core dump文件

使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core dump文件的,这是因为在/etc/profile文件中有这样一行ulimit -S -c 0 > /dev/null 2>&1如何打开core dump呢?最简单的方法是用户在自己的~/.bash_profile中加入ulimit -S -

2008-11-09 18:15:00 12582

原创 如何将字符串转换成Erlang Term

当使用Erlang程序与其它语言程序通讯时,可能需要把一个字符串转换成为Erlang的Term,可以这样实现{ok, Tokens, _} = erl_scan:string(String),{ok, Term} = erl_parse:parse_term(Tokens).注意这里的String需要以句号结尾。例如在erlang shell下:5> {ok, Tokens, _} = erl_s

2008-11-05 12:56:00 4215 2

原创 如何把一个用户加入sodu组

在一个命令前加sudo,可以使用超级用户的权限执行该命令。但并不是任何用户都可以使用sudo,只有用户属于sudo组时才能使用这个命令。如果希望把一个用户加入sudo组,可以用root登录系统,然后执行visudo(这个命令实际上就是用vi编辑/etc/sudoers文件,/etc/sudoers文件本身是只读的)。在文件中找到"root ALL=(ALL) ALL"这一行,然后在下面加入一行"u

2008-11-04 21:58:00 1129

UNIX Network Programming Volume 1, Third Edition

Richard Stevens的六本经典书籍之一,UNIX网络编程宝典

2009-02-03

面对软件错误构建可靠的分布式系统

Erlang之父Joe Armstrong的博士论文,介绍了Erlang语言的设计思想以及使用Erlang语言开发的方法论

2009-01-16

Programming Erlang

Erlang之父Joe Armstrong的力作,是介绍Erlang语言开发的经典书籍

2009-01-15

Advanced Programming in the UNIX Environment: Second Edition

Richard Stevens的六本经典书籍之一,Unix程序员必备的参考书籍,就不用多废话了吧

2008-11-11

The unix programming environment

Unix开发的入门书籍,涵盖内容丰富,适合于Unix/Linux开发新手

2008-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除