最近

这段时间发日志的频率明显低下来了,因为太忙,几乎是一周七天不间断的工作着,周六跟周末会休息一个上午,这一个上午的休息基本上就是在宿舍里睡觉,大概都是要在中午的时间醒来。有段时间我室友说好久没有见到我人了,他早上起得比我早(我想比大多数人都要早),我晚上回去的时候他早就睡了,所以两个人也碰不着面。忙有忙的好处,可以锻炼自己在高压情况下的承受能力。时间紧,任务在我看来算是比较重的,而且有些时间还无法加速。现在跑的实验,每个大概要耗时90分钟,你无法在这段时间里做其他的测试,只能等着,因为计算资源就那么多,受限。说来也算是个笑话,我测试的是基于云计算平台的实验,而由于我只有两台服务器,所以这个云计算平台并不能真正做到无限的计算和存储空间。我们要是不自己买服务器,而买Amazon的计算资源的话,可能成本会低很多,但是灵活性估计比现在这样子要差一些,而且在国内也不知道速度如何。这种情况下唯一的解决办法,就是熬夜加班,把自己工作时长加大,来在一天里可以做更多的实验。

现在这种单兵作战的方式是我最不喜欢的。遇到所有的问题都得自己一个人解决,在一个团队里,一个人加一个人的效率和解决问题的能力要绝对大于两个人单独工作的能力,因为有些时候我们考虑问题是不那么全面的,当有人和你合作一起解决问题的时候,互相之间的补充与提醒可以迅速将问题解决掉。不过既然现实的情况是这样的,那也只能自己独当一面,陌生而又庞大的系统,Ok,我去看跟代码;没有规范的文档,我还是去跟代码;遇到了问题理论上解释不通,再去跟代码;其他一些看代码解决不了的问题,或是没有代码可看的东西,查资料是第一种可以选择的办法,但是有些东西网上确实没有资料,怎么办,。只能用不同的情况去试,期望通过试来解决问题。这种方法是很低效的,但是却能在大多数时候把问题解决了,这也能锻炼了我全面思考问题的能力,还有就是培养了自己的耐心,试一遍不成功,两遍不成功,三遍不成功,有耐心继续试下去是需要很大的勇气的,有时候真的试到想到电脑扔了的地步。

人生会遇到很多很多的困难,而且有些困难是只能自己去解决的,不要指望着会有人来帮助你,甚至你都不要期许会有别人来鼓励你,成者王败者寇,有时候现实很残酷。所以,也不要去说别人取得的成就不够重大,很多时候,别人能够取得成功也是经历了很多你所想象不到的困难的。

感慨了很多,我要去收实验数据了,又有一组跑出来了。再跑一组我就回宿舍了,自己还是要多担心自己身体一点的,这种工作强度搞个半年人肯定会垮掉的。加油加油!

2,762 次浏览 | 没有评论
2010年4月26日 | 归档于 学习, 感悟, 校园, 生活
标签:

使用JDK进行Performance Tuning

JDK里有三个很好用的工具,jmapjconsolejvisualvm,三个工具都各有所侧重,但是如果你的系统遇到性能瓶颈(内存不足或是CPU占用率过高),你可以通过这三个工具来发现应用里的hot spot。我今天只记一下大概的用法,给自己做个备忘,详细的使用说明,等忙完了这段时间,整理一下。

先介绍一个小工具,jps,这也是jdk自带的工具之一,可以列出系统里所有的java进程。

jmap可以查看程序中堆的使用情况,具体的用法是:

jmap –histo:live <pid>;

以及可以将堆dump到一个文件,命令是:

jmap –dump:format=b,file=heap.bin <pid>;

请在<pid>处填入相应的进程的id。

jconsole可以查看某个java进程的内存使用、CPU占用率等,

如果想要远程查看某一java程序,则需要在该程序启动参数里加下如下参数:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

上文使用的9001是监听的端口号,你可以指定其他的值。然后在你的终端键入jconsole,选择连接远程进程,并填入相应的主机名和端口即可。如果无法连接,请修改/etc/hosts里的内容,将localhost绑定到机器的外部ip地址。

相应的数据可以导出为一个csv文件,这个很方便。

jvisualvm功能与jconsole的基本类似,但是可以做性能分析。

即可以分析出CPU时间被哪些线程所占用了,等等,并且它支持jmx,这东西我只听说过没用过,先放一边不表。

配置jvisualvm不需要改动原程序的启动参数,只需要在远程主机上运行jstatd即可。

新建一个叫jstatd.all.policy的文件,内容是:

grant codebase "file:${java.home}/../lib/tools.jar" {
    permission java.security.AllPermission;
};

然后使用如下命令启动jstatd,

jstatd -J-Djava.security.policy=jstatd.all.policy

然后在jvisualvm里选择添加远程主机即可。如果无法连接,请修改/etc/hosts里的内容,将localhost绑定到机器的外部ip地址。

4,226 次浏览 | 2 条评论
2010年4月12日 | 归档于 Java, Linux, 技术, 软件

第一次参加QClub的活动

去年也报过一次名,但是最后有事情所以就没有去。这周一收到的邮件,QClub有一个技术沙龙的活动,定在周六,想来自己周六也没有别的什么事情,就报名参加了,看到题目也是我感兴趣的内容。其一是由百度的黄容芳讲的《Web数据交互的艺术》,其二是由豆瓣的刘洪清讲的《分布式数据库BeansDB在豆瓣的应用》。

黄的演讲,如果去掉艺术二字,个人认为还是一个很好的演讲,其讲了Web数据的几种不同实现,其对长连接的分析十分清晰明了,不过黄把“轮询”写成了“轮循”,虽然是个小错误,但我觉得“轮询”解释了此事件的本质,即间隔一段时间轮流(轮)询问(询),而轮循仅能表达轮流循环的意思;关于数据压缩,主要讲到了两种主要的实施手段,一是使用类似YUI Compressor的压缩器主动对需要传输的内容进行“精简”,我觉得称之为“精简”更明确一点。另外一种是使用GZIP来做压缩,对于大型网站为了提高用户体验,加快网页的加载时间,这是两个很好的方法。后面说到的跨浏览器通信,则是我完全没有接触过的内容,主要是想解决当客户在同一台机器上打开不同的浏览器,或是使用同一浏览器同时打开某一页面时,各页面之间内容同步的问题,主要的解决方案是Flash。后面说到了数据在客户端的存储,提到了ie的UserData,Firefox的localStorage以及Flash和HTM5,却没有提Google Gears,百度是不是跟Google有仇?

说到Flash,黄说Flash的覆盖率还不是很高,只有97%,百度能在乎剩下的3%,着实是挺令我惊讶,想中国的大多数网银和几年前的淘宝支付宝都不支持Firefox。不过我倒是很赞赏Apple的作法,宁愿支持html5也不愿意支持FLASH,不论苹果是否只是由商业利益做出的考虑,但是阻止flash来扰乱本来就已经很混乱的web标准,我是很赞同这样的作法的。

另外一位豆瓣的工程师刘讲的内容也吸引了很多人,我自己也被他的话题所吸引。说到分布式key-value数据库,自己早有耳闻,但是我一直不明白也一直不是很清楚这种类型的数据库如何被有效的利用在web2.0的应用中。豆瓣的作法是没有完全将MySQL替换掉,而是将那些结构化的数据依然保留在MySQL中,而将另外一些依据应用场景数量多,对一致性要求不是十分高、许多场景下是一次写入多次读出的数据存储在他们的分布式key-value数据库中。工业界追求第一位的并不是程序的理论上的最优性,而是在应用需求前提之下的性能和成本。key-value分布式数据库不是万能的,但是在一些场景之下,却可以解决应用的许多问题。豆瓣网的现行用户有3000多万,其每天处理的数据我觉得还算是一个不是非常巨大的场景,与twitter和facebook相比,其还要差一到两个层级。随着豆瓣的成长,希望能从他们那里得到更多的经验。

最近很忙,少有更新博客,可以在twitter上联系我。@bbiao

4,519 次浏览 | 3 条评论
2010年4月10日 | 归档于 opensource, 云计算, 技术, 数据库, 校园, 生活

周六小记

CHB想换手机,看中了HTC Magic(G2),我跟他说中关村水太深,你先去论坛上泡一段时间,摸一下底细再买,给他推荐了两个论坛机锋网安卓网,其实我也没买过水货手机,不过想想这两家国内关注Android的论坛应该算是最大的两这了,看一看应该有收获。

昨天他说,看得差不多了,也查了一下报价,今天准备入手。早上打我电话,到实验室另一个在西安买过G2的小学弟把今天一些村里商家的报价打出来,最低1530,我差点喷了,不过同一店家的报价也有2000多的,于是觉得这一定是水价,肯定只是想吸引我们过去。

果然不出我所料,上午逛了几家在网上报价低的商家,全部是出了2100以上的价格,最贵的有报2300的,比我心理价位2000贵了许多。而且这种形势,在大部分商家都报高价的情况下,那些报低价的货的质量就十分令我们担忧。最后挑来挑去未果,中午先去吃饭,在大食代解决了午饭,下午继续,基本上定在了一这机锋认证的卖家那,贵是贵一点,也就一百块钱左右,但是能买个放心。出价2230,加一张sandisk4G的行货卡,贴膜,一共2310,10钱都不给便宜。之后便是装系统,刷机什么的。搞定的时候也三点多了,期间有个小朋友以十分快捷的速度买了Moto Milestone。

然后在回来的路上等车的时候,青年工社的人给我打电话,小黑修好了。我去取,换了主板,而且是蓝快的备板,全新的。交了500块钱有偿保修的费用,心里也算比较开心吧。终于修好了,周二送过去的,速度还可以。

3,395 次浏览 | 没有评论
2010年3月13日 | 归档于 生活

无法定位程序输入点DwnHintDxUpdate的解决办法

登陆飞信时,出现“无法找到入口”提示:
无法定位程序输入点DwnHintDxUpdate于动态链接库USER32.dll上。

曾经用Windows Vista的时候,上飞信就遇到过这个问题,现在在Windonws 7上用飞信2010,也有这个问题,但可恶的是点击了确定以后,提示还是不断的弹出来。Google了一下,发现了解决办法,有两个:

  1. 把安装目录下的dwmapi.dll 删掉
  2. 将%windir%system32dwmapi.dll复制到飞信的安装文件夹,覆盖原文件

问题是这个dll飞信带着是为了什么?为了在Windows Vista以下版本的机器上正常工作么?那为什么不测测在Windows Vista以上的机器上是否正常,或者安装的时候就检测一下,如果是Windows Vista以上版本的系统,就不要拷贝这个dll了。

4,434 次浏览 | 没有评论
2010年3月1日 | 归档于 软件

大数据量系统

这半个月一直在忙,忙着改程序,做实验,原来的系统的处理能力是10^4/10^5,我现在需要处理的数据量是10^6/10^7。原来正常的程序却出现了各种各样的异常,最明显的问题有两个,一个是OutOfMemory,一个是Connection Reset。

前一个问题有很多种不同的解决方法,就是增加机器的物理内存,调优jvm的启动参数,如果这些都解决不了问题,那就是程序本身的问题。我遇到的最多的就是BufferedReader溢出、ArrayList的不正确使用。这些问题都解决了还是会发现莫明其妙的溢出的话,还是增加物理内存吧。jvm虽然有垃圾收集机制,但是如果程序设计的初衷就没有为大数据量的数据考虑过的话,内存消耗真是件杯具而且及其不好解决在问题,特别是在code base有10^5级别的时候。

后一个问题,目前我还没有找到好的解决办法,目前能想到的,就是增加发送和接收缓存,平滑发送的速率,可是16*16的链接还是会莫明其妙的断掉。

郁闷了!还是需要再接再厉,外围的方案解决不了问题的话,只能去动核心的代码了。身边也没有有经验的人可以请教,我自己现在倒是对大数据量、巨数据量系统的可伸缩性和性能有了很强的兴趣。

6,178 次浏览 | 6 条评论
2010年2月5日 | 归档于 Java, 技术

Firefox 3.6使用Firefox 4.0的主题

Firefox 4.0还没有出现,但是出现了一个界面的草图,很不错。你可以利用Firefox 3.6的众插件来达到相同的效果。

strata40

需要安装 Strata40 主题 以及相应的选项插件 StrataBuddy

此外,为了实现标签及地址栏上显示进度条的功能,还需安装 Fission (Firefox 3.7测试版用户需要安装此版本Fission) 以及 Tab Progress Bar 这两个插件。同时作者也建议安装 App TabsOmnibar (整合地址栏与搜索栏)、Download Statusbar (类似 Google Chrome 那样的下载状态栏) 这三个插件,仍在使用 Firefox 3.5 的小盆友建议升到 3.6,否则还要多装一个隐藏菜单栏的插件

再此外,追求完美的小朋友还可以安装这个脚本(需 Stylish 插件):Tweaks for Spewboy’s Strata 40,可以让状态栏也透明显示,并修正了一些小瑕疵。

文章摘自此处

4,170 次浏览 | 没有评论
2010年1月29日 | 归档于 Firefox, Freeware, 软件

Apple iPad

虽然自己一直没有用过Apple的产品,但是对他的新产品发布都有关注,乔大爷北京时间今天凌晨发布了苹果定位在iPhone与MacBook之前的产品,iPad,这个名字并不出人意料之外,之前也有猜测叫做iSlate,我更倾向于这个名字。先上张图:

201012841519

外观上给人的印象真的就是一大号的iPod Touch,而且边框也太厚了吧?难道就是为了配合最下面的那个Home键么?

再说说他的配置:

  • Display: 9.7 inch IPS
  • Weight: 1.5 lbs
  • 0.5 inches thin
  • Battery life: 10 hours
  • Accelerometer and Compass
  • Speaker, Microphone, and 30 pin connector
  • WiFi 802.11n
  • Processor: 1GHz Apple A4 chip
  • Storage: 16-64GB Flash
  • Full capacative multi-touch

作为一个娱乐休闲终端,我想这个配置应该是不错的了。但是就其本身定位而言,没有加入对Flash的支持,虽然他有一个很强的Safari浏览器,可是仍然没有办法使用很多网上由Flash展现的电影、游戏。集成Flash对于苹果来说不能难做,而是不想做,做了无异于就失去了iPad内容独家提供商的地位。

苹果想通过各种各样的终端(iPod,iPhone,iPad)来分发书籍、音乐、电影、游戏和应用程序,并且不准备跟其他人一起合作,这些终端的操作系统都是iPhone OS,这种战略会成功么?也许吧,苹果本身就是一家喜欢创建新规则的公司。

3,715 次浏览 | 没有评论
2010年1月28日 | 归档于 未分类
标签:

CentOS配置vsftpd遇到550错误的解决办法

安装vsftpd很简单:yum install vsftpd

启动vsftpd也很简单:service vsftpd start

默认情况下用root是无法连接的,你可以创建一个非root帐户登录,但是登录是可以登录,却没有办法创建或是上传文件。有人说,可以把SELinux关掉,可是这样未免也有点尺度太大了,其实是SELinux里的设置问题,只要修改相应的配置就可以了。

发现问题的方法:

# getsebool -a | grep ftp
allow_ftpd_anon_write –> off
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
ftp_home_dir –> off
httpd_enable_ftp_server –> off
tftp_anon_write –> off

将红色字体部分的值改成on就可以了,设置的方法如下:

# setsebool -P ftp_home_dir 1

然后就可以上传文件,做你想做的事情了。

4,902 次浏览 | 没有评论
2010年1月27日 | 归档于 Linux, 技术, 软件

Refactor

为什么要重构?我不知道教科书是或是别人都会怎么讲,但是重构对我来说,基本上就是把一个糟糕的设计重新写一遍。那么,什么是我定义的两糟糕的设计?又怎么样来重写,并且期望能够达到一个怎么样的目的才算是一个好的重构呢?

糟糕的设计:

  1. 因为时间紧,任务重,没有进行设计,基本上是随心所欲的写出来的代码;
  2. 充斥着“if…else…”,打了无数的补丁,新增功能的时候,就得多增加判断条件;
  3. 代码变得越来越复杂,相同的代码出现在了不同的地方,修改一处,必须时刻记着也要修改别的地方

那怎么样来重写呢?完全抛弃以前的代码么?

  1. 完全抛弃以前的代码:之前的代码写得实在是太糟糕,没有任何可取之处。而且没有办法使用一些重构工具一进行梳理。我自己没有遇到过这种情况。每一小段代码还不至于写得面目全非,这应该算是代价相对较重的一种重构方法,与其说是重构,不如说是重新写。
  2. 使用之前的代码:之前的代码,小的部分还是可以使用的,将它们独立出来,形成单独的模块,并使用一定的模块调用机制(如使用事件机制、插件系统)等,来调合各个不同的模块之间进行谐调工作。

我希望能达到一个几样的效果呢?

  1. 简单的说,我比较追求系统的可扩展性(scalability & extensibility)、可维护性、较高的系统性能。
  2. scalability是期望在一个较大的数据集前,系统也可以有一个比较好的表现;
  3. extensibility是期望系统能够容易的增减功能;
  4. 可维护性是期望系统在需要做出修改的时候,可以更加方便;
  5. 较高的系统性能,这个就不必说了,谁都希望自己的程序跑得更快。

有些时候,做重构并不是一个简单的决定,因为你要做出更多的工作,还不一定能搞出一个可用的系统来,但是,有风险的事情,做成功了会收获很大的好处,大部分时间,我还是咬咬牙会去选择重构代码。

==eof==

这篇文章也发表在AgilePHP上,快去看看,Refactor

2,933 次浏览 | 没有评论
2010年1月24日 | 归档于 技术, 软件