Author Archives: 54chen
持续构建工具hudson使用手记
hudson是一个强大的持续性构建服务器。(现在开发者们分了一个分支,改叫Jenkins。)我(54chen)在使用过程中的手记如下: 下载 地址:http://hudson-ci.org/ wget http://java.net/projects/hudson/downloads/download/war/hudson-2.0.1.war 速度不咋的,60k/s. 先决条件 系统:centos 5.5 resin4下不work,换成了tomcat。 cp /opt/soft/hudson/hudson-2.0.1.war /opt/soft/apache-tomcat-7.0.16/webapps/ 遇到的问题 1)tomcat使用utf8环境。 vim tomcat/conf/server.xml 找到8080,加入一行 URIEncoding="UTF-8"。 2)maven不工作 hudson启动后,系统管理里面,设置maven的地址:MAVEN_HOME指到maven的主目录,不是bin目录。 3)svn不工作 报re_version错误,在你的svn地址的最后面加上@HEAD 4)hudson一切正常后,有svn bug FATAL: tried to access method hudson.scm.ChangeLogSet$Entry.setParent(Lhudson/scm/ChangeLogSet;)V from class hudson.scm.SubversionChangeLogSet 报上面的错误,我(54chen)在http://i
mediawiki脚本自动发内容实现
相信很多公司都是在使用mediawiki做内部team的知识管理,同时也有一些边边角角的脚本去做诸如上线、报警一类的工作。经常会有这样的需求:在上线的时候自动更新wiki的一页内容。 实现起来很简单,只需要一个curl即可,mediawiki提供了http restful的接口,在api.php上,可以做很多事情,下面是实际使用的举例。 目标:上线脚本最后执行一下记录,更新wiki里的一页做为上线记录,Online logging包换的元素有:日期,项目,版本号,机器。 环境:安装了 curl的机器 实现细节(wiki.sh): #! /bin/sh OPS_APP=$1 shift OPS_REV=$1 shift OPS_SERVER=$1 OPS_TIME=`date` echo "\nwrite to wiki" TOKEN=`curl -s -d 'action=login&lgname=你的用户名&lgpassword=你的密码&format=json' http://你的wiki域名/wiki/api.php -D cookies.txt -b cookies.txt | sed -e 's/.*token":"//' -e 's/".*//'` curl -s -d "action=login&lgname=你的用户名&lgpassword=你的密码&lgtoken=${TOKEN}&format=json" http://你的wiki域名/wiki/api.php …
java log4j 日志分析工具分享
java线上项目往往有许多的exception出现了没来得及去看,通过下面的工具,可以在每天早晨上班的时候通过邮件发出头一天出现的异常次数,是提高生产力和提早发现问题的好办法。 配置: 1.解压到指定目录 /data/analyze 2.email发送配置 vim mail.pl 5行,6行,7行,14行 修改为自己的配置 3.server配置 ssh-keygen打通ssh cd server 项目名_server写服务器ip,多个机器一行一个 4.其他 可能会有不相同的log目录地址,看着修改一下shell就行。 *修改自烧饼的脚本,点击下载: http://ishare.iask.sina.com.cn/f/16530420.html
hive迁移hadoop namenode时遇到的问题
使用了一段时间的hive和hadoop,在迁移datanode时很容易,要迁移namenode,hive里就闹情绪了。更改namenode后,在hive中运行select 依旧指向之前的namenode地址。 要如何解决呢,具体操作如下: 1.复制打包老的namenode 2.复制打包老的namenode的hdfs目录 3.到新机器准备好:修改master的值 复制到各节点 修改hive的定义 4.hive这里使用了mysql来保存metadata 因为这些信息会被写死在hive的DBS和SBS表里,下面是关键的一步: 进入mysql,执行下面的sql, update DBS set DB_LOCATION_URI=REPLACE(DB_LOCATION_URI,'old host','new host'); update SDS set LOCATION=REPLACE(LOCATION,'old host','new host'); 启动,一切正常了!迁移hive namenode成功。
java实时日志大文件分析
日志分析时经常会遇到这个问题:一个正在增长中的大文件,要分析新增的每一行的固定内容进行统计并展示啥的。用java的RandomAccessFile盯住文件的末尾,是一个不错的选择,下面的实现,是一个高效的java tail工具,实现类似linux的tail工具的功能。用来做大日志文件的实时分析,是一个不错的选择。 public class LogFileTailer extends Thread { private Logger logger = LoggerFactory.getLogger(LogFileTailer.class); /** * How frequently to check for file changes; defaults to 5 seconds */ private long sampleInterval = 5000; /** * The log file to tail */ …
改写java TreeMap制造方便查询的ip内存库
国库流行的ip库记录数大约在6万条左右,数据格式大约都是如下: start,end,country... 要查询的时候都是放到mysql里去,然后select * from ip where start>=xx and end end <=xx来得到ip信息,我(54chen)在搞一个实时监控时,因为并发量非常大,全部查询IP库,需要好几万每秒的查询,特改了java的TreeMap的get方法,将所有数据放到内存里来操作,put的时候还是保持TreeMap的红黑树实现,以start作为key,而在get的时候有一个 compare的过程,在发现compare是大于0的时候进行如下修改: else if (cmp > 0) { int start = ((Data) p.value).getStart(); int end = ((Data) p.value).getEnd(); int intKey = Integer.parseInt(k.toString()); if (intKey >= start && intKey <= …
maven打jar包自动生成run脚本-appassembler插件的使用
关键配置: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.1.1</version> <configuration> <programs> <program> <mainClass>com.chen.logtailer.Tail</mainClass> <name>app</name> </program> </programs> </configuration> </plugin> #mvn package appassembler:assemble #sh target/appassembler/bin/app 优点: 不需要管理各种run的脚本,自动生成。
巧用交换机,瞬间切流量
需求: 1号机服务移到2号机,然后要把1号机搬走。 原理: 交换机有ip对应mac地址的缓存,只需复制到ip和mac,可以在机房内的局域网里瞬间切换到另一个机器上。 操作: 1)在2号机准备好1号机的服务,并测试通过。记录1号机的mac和ip 2)以下操作要双开窗口,快速操作 3)在1号机执行:ifocnfig eth0 down 4)在2号机执行: ifconfig eth0:0 123.123.123.1 ifconfig eth0:0 hw ether 111111111111[1号机mac] ifconfig eth0:0 up 5)恭喜成功了! 6)搬走1号机,再也不要回来! 7)在2号机/etc/rc.local里添加: ifconfig eth0:0 123.123.123.1 ifconfig eth0:0 hw ether 111111111111[1号机mac] ifconfig eth0:0 up 终。
硬件为王,软件为帝--记突增的访问
五一归来两周,精力都放在了因为服务器压力突增而来的各种鸡飞狗跳的事情上,今天总结一下,算是对过去两周的总结,希望对各创业团队有所借鉴。 1.访问突增,连锁反应 最先开始出现问题的,是在小负载下没有出现的问题,在大压力时,只要DB一堵,表像就会是循环锁死。 解决之道: 服务要有清晰的架构,开发规范里一定要有明确的架构层次规范,最好还有代码的层次规范。 2.mysql设计不合理,压力指数增加 mysql中存在大量的更新操作,特别是大字段或者变长字段的频繁更新,导致磁盘io居高不下,慢查询越来越多。 硬解决之道: raid卡加电,开启raid写缓存:一般服务器的raid卡都没有开启,开启是有一定用处的,但有一个前提,不是待续的高写入,否则这个写缓存是没有意义的。电池充电时无法缓存,一般三个月充一次电。 转微博:FusionioChina 回复 @YauzZ:多一个故障点。多一份丢数据的可能。而且目前有Raid卡的内存做到1GB。丢不起呀。(5月11日 23:29) 从raid分到多个盘、盘柜,都是从硬件上用多硬盘分担的好方案。 软解决之道: 写方案建立mysql隔离层,在写入前预先处理,类似软件缓存方案,效果明显,修改复杂。 3.后续可做 灵活的中间层数据层切换逻辑,让负载可以随时转移、分隔,基本可以达到“人傻钱多,万事不愁”。
erlang学习手记
ubuntu10.04下erlide for eclipse安装 网址:http://erlide.sourceforge.net/ 3.5版本的eclipse,直接用url http://erlide.org/update 安装 安装后,还需要erlang的环境: sudo apt-get install erlang 现在还不能打开文件,会报空指针错误,选择window->preferences->erlang->installed runtimes 把location选择到 /usr/lib/erlang 即可使用。 [把build automatically关掉,这插件还是不怎么靠谱的,用来写写代码就完了,要编译还是走命令行] erlang学习要点: (1)-module(xx). 注意前面的杠(-)和后面的点(.) 类似java的package,文件名要求为xx.erl,与module里名字相同。 (2)-export([double/1]). 同样注意杠和点。表示模块内的函数为double,包含一个参数。 扩展:多个声明这样写 -export([fac/1, mult/2]). (3)模式匹配 xxxx->aaaa; 箭头的用意:节省代码,不需要if...else...对应前面执行箭头后面。 (4)变量只能单次赋值 首字母必须大写。 (5)元子 以小写字母开头。只是一个名字。类似java的常量。 (6)元组 {inch,Y} {moscow,{c,-10}} 元组中有元素。 (7)列表 …
SEARCH
Update
- rose手册第三章三节:controller层:ErrorHandler支持
- 54chen Twitter memo 2012-05-13
- 54chen Twitter memo 2012-05-06
- rose手册第三章二节:controller层:拦截器支持
- 54chen Twitter memo 2012-04-29
- rose手册第三章一节:controller层:url对照规则与返回结果规则
- 54chen Twitter memo 2012-04-22
- 54chen Twitter memo 2012-04-15
- rose手册第二章:配置与使用
- 54chen Twitter memo 2012-04-08
- 54chen Twitter memo 2012-04-01
- rose手册第一章:入门指引
- 54chen Twitter memo 2012-03-25
- 54chen Twitter memo 2012-03-18
- senseidb使用手记
