- 博客(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 9012 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 3716
原创 初试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 6110
原创 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 2347
原创 MongoDB学习笔记4 - MongoDB数据导入实验(mongoimport)
<br />昨天比较了一下在某个特定应用中MongoDB和MySQL导入数据的性能,但是MongoDB的测试结果并不能令人满意,今天继续尝试了几种导入数据的方法,希望提升数据导入性能。<br /> <br />在昨天的实验中,是以id随机的顺序插入数据的,由于我们在id这个属性上面建立了递增索引,因此首先怀疑的是由于id无序造成后面插入的数据有可能导致前面已经插入的数据移动位置,所以第一个实验把插入顺序改成按id赠序。但结果没有什么变化,插入一百万条数据用了1422秒(比昨天按id随机顺序插入还慢了点,
2011-02-22 15:08:00 14199 2
原创 MongoDB学习笔记3 - MongoDB vs MySQL
<br />今天通过一个实验比较了一下MongoDB和MySQL的性能,注意这个比较只反映了我们这个应用场景下的情况,并不能代表普遍的情况。<br /> <br />我们希望存储一些视频历史上的流量,需要存1年的时间,每天活跃的视频在百万数量级,流量用整型表示就可以了。在我们的应用中,写性能是优先考虑的因素,所以第一步的实验主要比较写入的性能,由于存储的数据是被单一应用(进程)独享的,sqlite也满足我们的应用场景,因此我们同时也测试了sqlite的写入性能。<br /> <br />实验环境:<br /
2011-02-22 00:03:00 5173
原创 通过swappiness内核参数调节swap使用
今天跟同事学了一招,可以通过修改swappiness内核参数,降低系统对swap的使用,从而提高系统的性能。遇到的问题是这样的,新版本产品发布后,每小时对内存的使用会有一个尖峰,这个峰值还远没有到达服务器的物理内存。可是确发现内存使用达到峰值时系统开始使用swap,在swap的过程中系统性能会有所下降,表现为较大的服务延迟。对这种情况,可以通过调节swappiness内核参数降低系统对swap的使用,从而避免不必要的swap对性能造成的影响。这里有一篇关于swappiness内核参数的详细介绍。简单地说
2011-02-12 23:02:00 8206
原创 一个简单的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 2388
原创 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 1908
原创 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 1888
原创 利用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 1110
转载 转一篇Ubuntu 服务器版 Iptables 基本设置指南
昨天装pptpd的时候用到了iptables,稍微学习了一下,转一篇Ubuntu 服务器版 Iptables 基本设置指南。
2010-12-28 12:09:00 772
原创 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 2417
原创 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 26753
原创 如何解析超长的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 8163
原创 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 42490
原创 当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 7592 2
原创 Linux下如何查看进程打开的文件以及修改进程打开文件数上限
1. 查看进程打开文件在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件。2. 修改进程打开文件数上限Linux默认的进程打开文件上限是1024个,可以通过ulimit -n查看。很多系统上限可以通过修改/etc/security/limits.con
2008-11-11 01:06:00 6407
原创 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 12713
原创 如何将字符串转换成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 4306 2
原创 如何把一个用户加入sodu组
在一个命令前加sudo,可以使用超级用户的权限执行该命令。但并不是任何用户都可以使用sudo,只有用户属于sudo组时才能使用这个命令。如果希望把一个用户加入sudo组,可以用root登录系统,然后执行visudo(这个命令实际上就是用vi编辑/etc/sudoers文件,/etc/sudoers文件本身是只读的)。在文件中找到"root ALL=(ALL) ALL"这一行,然后在下面加入一行"u
2008-11-04 21:58:00 1162
《强化学习》英文版(第2版)
2024-09-13
Advanced Programming in the UNIX Environment: Second Edition
2008-11-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人