December 2, 2010
正确理解Linux内存占用过高的问题
"\u003cp\u003e最近有个月经问题,老有人问为何开机后,还没有其他服务,mem就被用完了?是不是内存泄露?是否要重启服务?只能说不要看现象,要看本质才能找到问题的根源。\n往往给出这样的结果,怀疑内存用了90%:\nMem: 4146788k total, 3825536k used, 321252k free, 213488k buffers\nSwap: 2650684k total, 80k used, 2650604k free, 3006404k cached\u003c/p\u003e\n\u003cp\u003e这样怀疑很普遍,因为很多人用惯了Windows。Windows下,可以使用任务管理器查看当前进程对于内存的消耗情况。在我看来,Windows物理内存总是留下一定的空间,就算此时物理内存有空闲时,也会让某些程序去使用虚拟内存,目的是在Windows下启动新程序时,直接分配空闲的物理内存,这样子新程序启动速度就较快,而Linux则不然。\u003c/p\u003e\n\u003cp\u003e而在Linux下,使用top命令看到内存占用情况:\u003c/p\u003e\n\u003cp\u003eMem: 4146788k total, 3825536k used, 321252k free, 213488k buffers\nSwap: 2650684k …\u003c/p\u003e"
December 2, 2010
Linux VPS禁止某个IP访问
"\u003cp\u003e今天在查看 \u003ca href=\"http://www.vpser.net/\"\u003eVPS侦探\u003c/a\u003e 的 \u003ca href=\"http://www.diavps.cn/client/aff.php?aff=002\"\u003eVPS\u003c/a\u003e 的SSH登录记录吓了一跳,居然与几个IP连续登录SSH字典猜root密码,我很生气,后果很严重,GFW掉他们,现公布他们的名单:\u003c/p\u003e\n\u003cp\u003e62.75.214.93 gera125.server4you.de 德国/德国鬼子\u003c/p\u003e\n\u003cp\u003e203.215.252.189 香港特别行政区/无语。。。。\u003c/p\u003e\n\u003cp\u003e219.143.200.169 北京市电信 /在党中央还做坏事。。。。\u003c/p\u003e\n\u003cp\u003e60.12.193.134 浙江省湖州市网通 /\u003c/p\u003e\n\u003cp\u003ec953dc2c.virtua.com.br 201.83.220.44 巴西 /就你最多。。。。\u003c/p\u003e\n\u003cp\u003e其中几个还搭建了Nginx的环境,都没做站。\u003c/p\u003e\n\u003cp\u003e/etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。\u003cimg src=\"http://www.vpser.net/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003e如果请求访问的主机名或IP不包含在/etc/hosts.allow中,那么tcpd进程就检查/etc/hosts.deny。看请求访问的主机名或IP有没有包含在hosts.deny文件中。如果包含,那么访问就被拒绝;如果既不包含 …\u003c/p\u003e"
December 2, 2010
从Godaddy转移域名到name.com
"\u003cp\u003e国内转移域名不仅手续繁琐而且需要额外支出,跟国外域名商之间转移域名的快捷方便一比较,你就会觉得国内域名商的落后、不思进取。\u003c/p\u003e\n\u003cp\u003e刚将一个域名从\u003ca href=\"http://godaddy.com/\"\u003eGodaddy\u003c/a\u003e转出到\u003ca href=\"http://name.com/\"\u003ename.com\u003c/a\u003e,花费的时间仅为一个小时。我对国内域名商的落后与不思进取的感受更深了。\n\u003ca href=\"http://bingu.net/wp-content/images/200906/mail.png\"\u003e\u003cimg src=\"http://bingu.net/wp-content/images/200906/_mail.png\" alt=\"从Godaddy转移域名到name.com\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e以下是转移的过程\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e首先,登录并进入Godaddy的域名管理器(Domain Manager)。\u003c/li\u003e\n\u003cli\u003e点击你要转移的域名所对应的后面的小锁。 \u003ca href=\"http://bingu.net/wp-content/images/200906/godaddy00.png\"\u003e\u003cimg src=\"http://bingu.net/wp-content/images/200906/_godaddy00.png\" alt=\"从Godaddy转移域名到name.com\"\u003e\u003c/a\u003e\n在接下来的页面中去掉“Lock Domain”前的小勾,然后点击“OK”。这时域名将去除锁定。\n\u003cimg src=\"http://bingu.net/wp-content/images/200906/godaddy000.png\" alt=\"从Godaddy转移域名到name.com\"\u003e\u003c/li\u003e\n\u003cli\u003e接下来,是“讨Auth Code”\n\u003ca href=\"http://bingu.net/wp-content/images/200906/godaddy001.png\"\u003e\u003cimg src=\"http://bingu.net/wp-content/images/200906/_godaddy001.png\" alt=\"从Godaddy转移域名到name.com\"\u003e\u003c/a\u003e\n点选“(Send by Email)”,几分钟后,你就能收到Godaddy发给你一封带Auth Code的邮件。(是的,就几分钟的事)\u003c/li\u003e\n\u003cli\u003e再来,登录\u003ca href=\"http://name.com/\"\u003ename.com\u003c/a\u003e,并进入\u003ca href=\"http://www.name.com/transfers_in/\"\u003eTransfer Domain Names\u003c/a\u003e(在页脚,你可以看到这个链接)。进去后,填入域名和“Auth Code”并确定。如无意外,点击“Checkout”进行付费(com转移是7.99刀,包括一年的续费,也就是说转移是不收费的,都用来续费了。)。付费后,name.com会发给你一封确定转移域名的邮件,点 …\u003c/li\u003e\u003c/ol\u003e"
December 1, 2010
linux系统中关于文件权限
"\u003cp\u003e文件权限除了r、w、x外还有s、t、i、a权限:\u003c/p\u003e\n\u003cp\u003es:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。在设置s权限时文件属主、属组必须先设置相应的x权 限,否则s权限并不能正真生效(c h m o d命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效)。Linux修改密码的passwd便是个设置了SUID的程序,普通用户无读写/etc/shadow文件 的权限确可以修改自己的密码。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003els -al /usr/bin/passwd\u003c/p\u003e\n\u003cp\u003e-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e我们可以通过字符模式设置s权限:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003echmod a+s filename\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e也可以使用绝对模式进行设置:\u003c/p\u003e\n\u003cp\u003e设置s u i d:将相应的权限位之前的那一位设置为4;\u003c/p\u003e\n\u003cp\u003e设置g u i d:将相应的权限位之前的那一位设置为2;\u003c/p\u003e\n\u003cp\u003e两者都置位:将相应的权限位之前的那一位设置为4+2=6。\u003c/p\u003e\n\u003cp\u003e如:chmod 4764 filename …\u003c/p\u003e"
December 1, 2010
BTree,B-Tree,B+Tree,B*Tree都是什么
"\u003ch1 id=\"b树\"\u003eB树\u003c/h1\u003e\n\u003cp\u003e即二叉搜索树:\u003c/p\u003e\n\u003cp\u003e1.所有非叶子结点至多拥有两个儿子(Left和Right);\u003c/p\u003e\n\u003cp\u003e2.所有结点存储一个关键字;\u003c/p\u003e\n\u003cp\u003e3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;\u003c/p\u003e\n\u003cp\u003e如:\u003cimg src=\"http://www.haohtml.com/uploads/allimg/101201/092542M15-0.jpg\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003eB树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键 字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;\u003c/p\u003e\n\u003cp\u003e如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树 结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;\u003c/p\u003e\n\u003cp\u003e如:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"http://www.haohtml.com/uploads/allimg/101201/0925421M8-1.jpg\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003e但B树在经过多次插入与删除后,有可能导致不同的结构\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"http://www.haohtml.com/uploads/allimg/101201/092542L35-2.jpg\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003e右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结 构,和避免右图的结构,也就是所谓的“平衡”问题;\u003c/p\u003e\n\u003cp\u003e实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树结点分布均匀的平衡算法是平衡二叉树的关 …\u003c/p\u003e"
November 30, 2010
NOSQL数据库–HBase简介
"\u003cp\u003e最近因为项目原因,研究了Cassandra,Hbase等几个\u003cstrong\u003eNoSQL\u003c/strong\u003e数据库,最终决定采用HBase。在这里,我就向大家分享一下自己对HBase的理解。\u003c/p\u003e\n\u003cp\u003e在说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到 底有多少,说不定今天你的用户还少,明天系统用户就变多了,结果您的系统应付不过来了了,不干了,这岂不是咱哥几个的悲哀,说时髦点就叫“杯具啊”。\u003c/p\u003e\n\u003cp\u003e其实说白了,这些就是事先没有认清楚互联网应用什么才是最重要的。从系统架构的角度来说,互联网应用更加看重系统性能以及伸缩性,而传统企业级应用都是比较看重数据完整性和数据安全性。那么我们就来说说互联网应用伸缩性这事儿.对于伸缩性这事儿,哥们儿我也写了几篇博文,想看的兄弟可以参考我以前的博文,对于web server,app server的伸缩性,我在这里先不说了,因为这部分的伸缩性相对来说比较容易一点,我主要来回顾一些一个慢慢变大的互联网应用如何应对数据库这一层的伸缩。\u003c/p\u003e\n\u003cp\u003e首先刚开始,人不多,压力也不大,搞一台数据库服务器就搞定了,此时所有的东东都塞进一 …\u003c/p\u003e"
November 30, 2010
NOSQL中Cassandra与HBase的比较,及我们迁移系统的原因
"\u003cp\u003e原文地址:http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved\u003c/p\u003e\n\u003cp\u003eHBase vs Cassandra: why we moved\u003c/p\u003e\n\u003cp\u003e下文中将讨论为何选择Cassandra作为我们的NOSQL方案。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e是否\u003cstrong\u003e\u003cstrong\u003eCassandra\u003c/strong\u003e\u003c/strong\u003e的血统预言了未来?\u003c/strong\u003e****\u003c/p\u003e\n\u003cp\u003e我发现在软件问题上,我们先去考虑上层问题而不是直接深入到细节,可以节约大量时间。在选择HBase还是Cassandra上我也遵循了这一信条。HBase还是Cassandra具有完全不同的血统和基因,这决定了他们在我们应用的可行性。\u003c/p\u003e\n\u003cp\u003eHBase及其支持系统源自Google的GFS和BigTable设计;而最初由Facebook开源出来的Cassandra采用了BigTable的数据模型,确实是用类似Amozon的Dynamo的存储系统(实际上Cassandra最初的开发工作都是由两个原Dynamo工程师开发的)。\u003c/p\u003e\n\u003cp\u003e在我看来,他们的根源决定了HBase更适用于数据仓库和大规模数据处理分析(比如对Web建索引),而Cassandra更适用于实时事务处理和处理交互性 …\u003c/p\u003e"
November 26, 2010
配置php支持sqlite数据库
"\u003cp\u003ephp5-windows默认已经包含了sqlite模块,但没有启用\u003c/p\u003e\n\u003cp\u003e如果需要支持sqlite,则修改php.ini\u003c/p\u003e\n\u003cp\u003e启用三个扩展语句\u003c/p\u003e\n\u003cp\u003eextension=php_pdo.dll\u003c/p\u003e\n\u003cp\u003eextension=php_pdo_sqlite.dll\u003c/p\u003e\n\u003cp\u003eextension=php_sqlite.dll (可能不是必须的,但最好一起啦)\u003c/p\u003e\n\u003cp\u003e我第一次只开了下面两个,因此始终无法启用,测试程序会报错\u003c/p\u003e\n\u003cp\u003eFatal error: Call to undefined function sqlite_open()\u003c/p\u003e\n\u003cp\u003e也就是sqlite没有成功启动\u003c/p\u003e"
November 24, 2010
Memcache mutex设计模式
"\u003cp\u003e周六的S2 \u003ca href=\"http://www.s2forum.org/1/topic/\"\u003eWeb 2.0技术沙龙\u003c/a\u003e上介绍了memcache中使用mutex场景(文后要演讲稿),有网友对详情感兴趣,简单介绍如下。\u003c/p\u003e\n\u003ch3 id=\"场景\"\u003e场景\u003c/h3\u003e\n\u003cp\u003eMutex主要用于有大量并发访问并存在cache过期的场合,如\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e首页top 10, 由数据库加载到memcache缓存n分钟\u003c/li\u003e\n\u003cli\u003e微博中名人的content cache, 一旦不存在会大量请求不能命中并加载数据库\u003c/li\u003e\n\u003cli\u003e需要执行多个IO操作生成的数据存在cache中, 比如查询db多次\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"问题\"\u003e问题\u003c/h3\u003e\n\u003cp\u003e在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险。\u003cstrong\u003e我们曾经在线上系统出现过类似故障\u003c/strong\u003e。\u003c/p\u003e\n\u003ch3 id=\"解决方法\"\u003e解决方法\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e方法一\u003c/strong\u003e\n在load db之前先add一个mutex key, mutex key add成功之后再去做加载db, 如果add失败则sleep之后重试读取原cache数据。为了防止死锁,mutex key也需要设置过期时间。伪代码如下\n(\u003cem\u003e注:下文伪代码仅供了解思路,可能存在bug,欢迎随时指出。\u003c/em\u003e)\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eif (memcache.get(key) == null) {\n // 3 min …\u003c/code\u003e\u003c/pre\u003e"
November 24, 2010
Twitter系统运维经验
"\u003cp\u003e最近看到的另外一个介绍Twitter技术的视频[\u003ca href=\"http://assets.en.oreilly.com/1/event/29/Fixing%20Twitter_%20Improving%20the%20Performance%20and%20Scalability%20of%20the%20World%27s%20Most%20Popular%20Micro-blogging%20Site%20Presentation.pdf\"\u003eSlides\u003c/a\u003e] [\u003ca href=\"http://blip.tv/file/2300327\"\u003eVideo\u003c/a\u003e (GFWed)],这是Twitter的John Adams在\u003ca href=\"http://en.oreilly.com/velocity2009\"\u003eVelocity 2009\u003c/a\u003e的一个演讲,主要介绍了Twitter在系统运维方面一些经验。 本文大部分整理的观点都在Twitter(@\u003ca href=\"http://twitter.com/xmpp\"\u003exmpp\u003c/a\u003e)上发过,这里全部整理出来并补充完整。\u003c/p\u003e\n\u003cp\u003eTwitter没有自己的硬件,都是由NTTA来提供,同时NTTA负责硬件相关的网络、带宽、负载均衡等业务,Twitter operations team\u003cstrong\u003e只关注核心的业务,包括Performance,Availability,Capacity Planning容量规划,配置管理\u003c/strong\u003e等,这个可能跟国内一般的互联网公司有所区别。\u003c/p\u003e\n\u003ch3 id=\"1-运维经验\"\u003e1. 运维经验\u003c/h3\u003e\n\u003ch4 id=\"-metrics\"\u003e* Metrics\u003c/h4\u003e\n\u003cp\u003eTwitter的监控后台几乎都是图表(critical metrics),类似驾驶室的转速表,时速表,让操作者可以迅速的了解系统当前的运作状态。联想到我们做的类似监控后台,数据很多,但往往还需要浏览者做二次分析判断,像这样满屏都是图表的方法做得还不够,可以学习下这方面经验。 据John介绍可以从图表上看到系统的瓶颈-系统最弱 …\u003c/p\u003e"
November 24, 2010
是用js 实现 图片“另存为” 最后怎样实现的? (FireFox没有测试过)
"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e使用JS实现单击连接保存图片\n2种形式都可以\n\n第一种:\n\u003c/code\u003e\u003c/pre\u003e\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;script\u0026gt;\nfunction SaveAs5(imgURL)\n...{\n var oPop = window.open(imgURL,\u0026#34;\u0026#34;,\u0026#34;width=1, height=1, top=5000, left=5000\u0026#34;);\n for(; oPop.document.readyState != \u0026#34;complete\u0026#34;; )\n ...{\n if (oPop.document.readyState == \u0026#34;complete\u0026#34;)break;\n }\n oPop.document.execCommand(\u0026#34;SaveAs\u0026#34;);\n oPop.close();\n}\n\u0026lt;/script\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;img src=\u0026#34;t_screenshot_17616.jpg\u0026#34; id=\u0026#34;DemoImg\u0026#34; border=\u0026#34;0\u0026#34; …\u003c/code\u003e\u003c/pre\u003e"
November 24, 2010
JS打开图片另存为对话框
"\u003cp\u003e New Document\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003efunction downLoadImage(imagePathURL){\u003c/p\u003e\n\u003cp\u003e//如果中间IFRAME不存在,则添加\nif(!document.getElementById(“_SAVEASIMAGE_TEMP_FRAME”))\njQuery(‘ width=”0″ height=”0″ src=”about:blank”\u0026gt;’).appendTo(“body”);\u003c/p\u003e\n\u003cp\u003eif(document.all._SAVEASIMAGE_TEMP_FRAME.src!=imagePathURL){\n//图片地址发生变化,加载图片\ndocument.all._SAVEASIMAGE_TEMP_FRAME.src = imagePathURL;\n}else{\n//图片地址没有变化,直接另存为\n_doSaveAsImage();\n}\n}\nfunction _doSaveAsImage(){\nif(document.all._SAVEASIMAGE_TEMP_FRAME.src!=”about:blank”) …\u003c/p\u003e\u003c/blockquote\u003e"
November 23, 2010
js里面如何获取网络地址的图片的高度和宽度 (变通办法)
"\u003cp\u003e原图片是 :\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e(function(){\nvar img=document.createElement(‘img’);//创建一个img元素\nimg.src=”http://gg.blueidea.com/2008/blueidea/flash2008.gif”;//指定src\nimg.style.position=”absolute”;//防止正常的内容变形\nimg.style.visibility=’hidden’;//藏起来\nvar inj=document.getElementById(‘box’).appendChild(img);//插入到box中。当然插入到document.body也可以\nalert(‘宽:’+inj.offsetWidth);//然后就可以通过 offset 取得宽和高了\nalert(‘高:’+inj.offsetHeight);\n})();\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e简单地说就是把图片放入一个自动伸缩的DIV中,然后获取DIV的宽和高!\u003c/p\u003e"
November 23, 2010
Allowed memory size of 8388608 bytes exhausted解决方法
"\u003cp\u003e出现该错误的原因:\u003c/p\u003e\n\u003cp\u003e是因为php页面消耗的最大内存默认是为 8M (在PHP的ini件里可以看到) ,如果文件太大 或图片太大 在读取的时候 会发生上述错误。\u003c/p\u003e\n\u003cp\u003e解决办法:\u003c/p\u003e\n\u003cp\u003e1,修改 php.ini\n将memory_limit由 8M 改成 16M(或更大),重启apache服务\u003c/p\u003e\n\u003cp\u003e2,在PHP 文件中 加入 ini_set(”memory_limit”,”100M”);\u003c/p\u003e\n\u003cp\u003e注意:为了系统的其它资源的正常使用 请您不要将 memory_limit设置太大,其中-1为不限\u003c/p\u003e\n\u003cp\u003e3,修改.htaccess 文档(前提是该目录支持.htaccess)\n在文档中新增一句:php_value memory_limit 16M(或更大)\u003c/p\u003e"
November 22, 2010
6个最佳房地产 WordPress 主题
"\u003cp\u003eWordPress 并不是一个简单的博客程序,它能干的事情非常多。如果你是一个地产中介,想通过互联网出售房子,那么你也可以通过 WordPress 来实现,是的,选择一个适合房地产的 WordPress 主题,就会让你事半功倍,并且现在网络上有非常多的和房地产相关的 WordPress 主题,并且还集成了房地产相关的功能(如位置,价格,大小,几房几厅,经纪人,代理等)。所以今天就给大家介绍下5个非常不错的房地产相关的 WordPress 主题。\u003c/p\u003e\n\u003cp\u003e本文翻译自 \u003ca href=\"http://theme10.com/best-real-estate-wordpress-themes/\" title=\"Permalink to 14 Real Estate WordPress Themes\"\u003e14 Real Estate WordPress Themes\u003c/a\u003e,原文有 14 个房地产相关的 WordPress 主题,这里节选其中最好的 6 个。\u003c/p\u003e\n\u003ch2 id=\"1-estate-by-woothemes-estate-是一个非常强大的但是管理非常方便的适合房地产中介-wordpress-主题这个主题使用了-wordpress-30-开始的自定义日志类型和自定义分类模式这些高级功能使得在-wordpress-后台能够有个真正的房地产的功能并且灵活的页面模板高级搜索功能以及集成了-google-地图灵活的房地产图片管理你会发现这款主题是非常值得取用的\"\u003e1. Estate (by \u003ca href=\"http://www.woothemes.com/amember/go.php?r=1023\u0026amp;i=l1\"\u003eWoothemes\u003c/a\u003e) \u003ca href=\"http://www.woothemes.com/amember/go.php?r=1023\u0026amp;i=l80\"\u003eEstate\u003c/a\u003e 是一个非常强大的,但是管理非常方便的适合房地产中介 WordPress 主题,这个主题使用了 WordPress 3.0 开始的自定义日志类型和自定义分类模式这些高级功能,使得在 WordPress 后台能够有个真正的“房地产”的功能,并且灵活的页面模板高级搜索功能,以及集成了 Google 地图,灵活的房地产图片管理,你 …\u003c/h2\u003e"