存档
-
使用JDK进行Performance Tuning
JDK里有三个很好用的工具,jmap,jconsole和jvisualvm,三个工具都各有所侧重,但是如果你的系统遇到性能瓶颈(内存不足或是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地址。
2,171 次查看 | 2 条评论 -
第一次参加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
2,025 次查看 | 3 条评论 -
周六小记
CHB想换手机,看中了HTC Magic(G2),我跟他说中关村水太深,你先去论坛上泡一段时间,摸一下底细再买,给他推荐了两个论坛机锋网和安卓网,其实我也没买过水货手机,不过想想这两家国内关注Android的论坛应该算是最大的两这了,看一看应该有收获。 昨天他说,看得差不多了,也查了一下报价,今天准备入手。早上打我电话,到实验室另一个在西安买过G2的小学弟把今天一些村里商家的报价打出来,最低1530,我差点喷了,不过同一店家的报价也有2000多的,于是觉得这一定是水价,肯定只是想吸引我们过去。 果然不出我所料,上午逛了几家在网上报价低的商家,全部是出了2100以上的价格,最贵的有报2300的,比我心理价位2000贵了许多。而且这种形势,在大部分商家都报高价的情况下,那些报低价的货的质量就十分令我们担忧。最后挑来挑去未果,中午先去吃饭,在大食代解决了午饭,下午继续,基本上定在了一这机锋认证的卖家那,贵是贵一点,也就一百块钱左右,但是能买个放心。出价2230,加一张sandisk4G的行货卡,贴膜,一共2310,10钱都不给便宜。之后便是装系统,刷机什么的。搞定的时候也三点多了,期间有个小朋友以十分快捷的速度买了Moto Milestone。 然后在回来的路上等车的时候,青年工社的人给我打电话,小黑修好了。我去取,换了主板,而且是蓝快的备板,全新的。交了500块钱有偿保修的费用,心里也算比较开心吧。终于修好了,周二送过去的,速度还可以。
1,211 次查看 | 没有评论2010年3月13日 | 归档于 生活 -
无法定位程序输入点DwnHintDxUpdate的解决办法
登陆飞信时,出现“无法找到入口”提示: 无法定位程序输入点DwnHintDxUpdate于动态链接库USER32.dll上。 曾经用Windows Vista的时候,上飞信就遇到过这个问题,现在在Windonws 7上用飞信2010,也有这个问题,但可恶的是点击了确定以后,提示还是不断的弹出来。Google了一下,发现了解决办法,有两个: 把安装目录下的dwmapi.dll 删掉 将%windir%\system32\dwmapi.dll复制到飞信的安装文件夹,覆盖原文件 问题是这个dll飞信带着是为了什么?为了在Windows Vista以下版本的机器上正常工作么?那为什么不测测在Windows Vista以上的机器上是否正常,或者安装的时候就检测一下,如果是Windows Vista以上版本的系统,就不要拷贝这个dll了。
2,114 次查看 | 没有评论2010年3月1日 | 归档于 软件 -
大数据量系统
这半个月一直在忙,忙着改程序,做实验,原来的系统的处理能力是10^4/10^5,我现在需要处理的数据量是10^6/10^7。原来正常的程序却出现了各种各样的异常,最明显的问题有两个,一个是OutOfMemory,一个是Connection Reset。 前一个问题有很多种不同的解决方法,就是增加机器的物理内存,调优jvm的启动参数,如果这些都解决不了问题,那就是程序本身的问题。我遇到的最多的就是BufferedReader溢出、ArrayList的不正确使用。这些问题都解决了还是会发现莫明其妙的溢出的话,还是增加物理内存吧。jvm虽然有垃圾收集机制,但是如果程序设计的初衷就没有为大数据量的数据考虑过的话,内存消耗真是件杯具而且及其不好解决在问题,特别是在code base有10^5级别的时候。 后一个问题,目前我还没有找到好的解决办法,目前能想到的,就是增加发送和接收缓存,平滑发送的速率,可是16*16的链接还是会莫明其妙的断掉。 郁闷了!还是需要再接再厉,外围的方案解决不了问题的话,只能去动核心的代码了。身边也没有有经验的人可以请教,我自己现在倒是对大数据量、巨数据量系统的可伸缩性和性能有了很强的兴趣。
3,536 次查看 | 6 条评论 -
Firefox 3.6使用Firefox 4.0的主题
Firefox 4.0还没有出现,但是出现了一个界面的草图,很不错。你可以利用Firefox 3.6的众插件来达到相同的效果。 需要安装 Strata40 主题 以及相应的选项插件 StrataBuddy。 此外,为了实现标签及地址栏上显示进度条的功能,还需安装 Fission (Firefox 3.7测试版用户需要安装此版本Fission) 以及 Tab Progress Bar 这两个插件。同时作者也建议安装 App Tabs 、Omnibar (整合地址栏与搜索栏)、Download Statusbar (类似 Google Chrome 那样的下载状态栏) 这三个插件,仍在使用 Firefox 3.5 的小盆友建议升到 3.6,否则还要多装一个隐藏菜单栏的插件。 再此外,追求完美的小朋友还可以安装这个脚本(需 Stylish 插件):Tweaks for Spewboy’s Strata 40,可以让状态栏也透明显示,并修正了一些小瑕疵。 文章摘自此处
2,630 次查看 | 没有评论 -
Apple iPad
虽然自己一直没有用过Apple的产品,但是对他的新产品发布都有关注,乔大爷北京时间今天凌晨发布了苹果定位在iPhone与MacBook之前的产品,iPad,这个名字并不出人意料之外,之前也有猜测叫做iSlate,我更倾向于这个名字。先上张图: 外观上给人的印象真的就是一大号的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,这种战略会成功么?也许吧,苹果本身就是一家喜欢创建新规则的公司。
1,740 次查看 | 没有评论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 然后就可以上传文件,做你想做的事情了。
1,922 次查看 | 没有评论 -
Refactor
为什么要重构?我不知道教科书是或是别人都会怎么讲,但是重构对我来说,基本上就是把一个糟糕的设计重新写一遍。那么,什么是我定义的两糟糕的设计?又怎么样来重写,并且期望能够达到一个怎么样的目的才算是一个好的重构呢? 糟糕的设计: 因为时间紧,任务重,没有进行设计,基本上是随心所欲的写出来的代码; 充斥着“if…else…”,打了无数的补丁,新增功能的时候,就得多增加判断条件; 代码变得越来越复杂,相同的代码出现在了不同的地方,修改一处,必须时刻记着也要修改别的地方 那怎么样来重写呢?完全抛弃以前的代码么? 完全抛弃以前的代码:之前的代码写得实在是太糟糕,没有任何可取之处。而且没有办法使用一些重构工具一进行梳理。我自己没有遇到过这种情况。每一小段代码还不至于写得面目全非,这应该算是代价相对较重的一种重构方法,与其说是重构,不如说是重新写。 使用之前的代码:之前的代码,小的部分还是可以使用的,将它们独立出来,形成单独的模块,并使用一定的模块调用机制(如使用事件机制、插件系统)等,来调合各个不同的模块之间进行谐调工作。 我希望能达到一个几样的效果呢? 简单的说,我比较追求系统的可扩展性(scalability & extensibility)、可维护性、较高的系统性能。 scalability是期望在一个较大的数据集前,系统也可以有一个比较好的表现; extensibility是期望系统能够容易的增减功能; 可维护性是期望系统在需要做出修改的时候,可以更加方便; 较高的系统性能,这个就不必说了,谁都希望自己的程序跑得更快。 有些时候,做重构并不是一个简单的决定,因为你要做出更多的工作,还不一定能搞出一个可用的系统来,但是,有风险的事情,做成功了会收获很大的好处,大部分时间,我还是咬咬牙会去选择重构代码。 ==eof== 这篇文章也发表在AgilePHP上,快去看看,Refactor
1,403 次查看 | 没有评论 -
Nokia 5530XM
还是要跟小6说声对不起,把你摔坏了。 现在用的是小5,最近太忙,没时间折腾,原来是打算买个HTC Magic(G2),顺便还能试试在Android平台上做开发。可是时间实在是太仓促,买水货不做够功课我是不敢去买的,于是就买了Nokia 5530 Xpress Music。 到目前为此,我只装了Opera Mini 4.0和Opera Mini 5.2 Beta 2,以及UCWeb 7.0,Fetion for N97,QQ 2008 for Nokia 5800。前面的三款软件可以顺利安装,每一款都让人爱不释手,可以根据你个人的习惯来选择一个做为你的浏览器。同时,系统本身自带的浏览器也是不错的哟。 QQ 2008,去官网下,地址是http://mobile.qq.com/2008,手机型号选Nokia 5800XM Fetion去官网下,地址是http://www.fetion.com.cn/download/mobileclient/,手机型号选N97 下下来了,OK,机器也连上WiFi了,想上飞信跟QQ,没门!这两个软件必须用GPRS连接,具体的设置方法是: 功能→设置→程序管理→已安装的程序→飞信(QQ)→选项→套件设置→接入点(移动梦网) 同时,我们要去掉那个无用的屏幕键盘,方法是: 功能→设置→程序管理→已安装的程序→飞信(QQ)→选项→套件设→屏幕键盘(关)→其它(默认) 与小五好好相处吧。 另外,连个WiFi的情况,可以正常使用手机自带的升级功能来升级系统,我真是肉牛满面呀!之前用小6从来没成功过。 如果你发现你的手机无法新建情景模式,或是无法自定义情景模式里的选项,那你可以尝试*#7370#这个功能!提醒:该功能会把你的手机彻底重置为出厂状态,所有联系人,以及设置信息都将不在。
1,799 次查看 | 没有评论

最新评论