Author Archives: zava

让Ubuntu32位支持4G内存的方法

本文针对内存超过3G,但还在使用32位ubuntu的朋友们,可以让你的ubuntu支持4G内存了。 Continue reading

Posted in Ubuntu | Tagged , , | Leave a comment

关于IO的同步,异步,阻塞,非阻塞

本文讲述了IO调用中的阻塞,非阻塞,同步,异步的概念和关系。是的读者可以很清楚的理解这几个概念。看了这篇文章,绝对可以很了解这几个IO调用的概念了。 Continue reading

Posted in Java, NIO | Tagged , , , , , | 10 Comments

apache httpd worker模式工作原理及配置

httpd在linux下默认使用prefork, 我们网站的服务器,在编译httpd的时候,就指定了使用worker模式。 简单了解 worker模式与 prefork模式 worker : httpd在启动的时候,会由root进程派生出几个子进程,每个子进程中会有固定数量的线程,到时候提供服务的,就是这些线程,也就是说一个进程能够同时提供多次服务。 prefork : httpd使用进程来提供服务,每个进程在同一时间提供一次服务。 worker 参数配置 由于我比较关注 worker 模式, 所以就特别关注了一下 worker 的一些参数配置。 worker的参数主要有:ServerLimit,ThreadLimit,StartServers,MinSpareThreads, MaxSpareThreads,ThreadsPerChild,MaxClients,MaxRequestsPerChild。 ServerLimit 是设置httpd root进程能够产生的最大进程数限制 ThreadLimit 是设置每个httpd子进程能够产生的最大服务线程限制 StarServers 是httpd刚启动时,root进程创建的子进程数 MinSpareThreads 顾名思义,就是最少的空闲线程数 MaxSpareThreads 就是最多的空闲线程数 ThreadsPerChild 每个子进程产生的线程数 MaxClients httpd同时处理的最大请求数 MaxRequestsPerChild 每个子进程提供的请求服务数,如果达到该值,则该子进程结束,由root进程根据需要再次派生新的子进程 其中几个参数之间的联系还是很重要的: ServerLimit … Continue reading

Posted in httpd | Tagged , , , | Leave a comment

百度发布SEO指南

在Google的搜索引擎优化指南出来将近两年的时候,百度官方也给出了他自己的搜索引擎优化指南。 把指南下下来之后,粗略的看了一下,大概是讲了四点,核心思想还是围绕用户体验中心的: 域名的注册,服务器的租用 域名简短,让用户很容易记住;服务器这方面,就是对用户的响应速度。 网站要让用户看懂,也要让搜索引擎看懂 包括对HTML元标签的使用, 还有尽量少用Flash和JS等搜索引擎还不太懂的东东。 网站运营的优化 增强品牌化,增加用户的信任,注重用户体验。 搜索引擎惩罚 惩罚不是目的,但是谁影响了搜索引擎对用户的体验,谁就会受到不同程度的惩罚。 对于这四点,大家也都是很清楚的。但最后的FAQ却引起了我的兴趣: 自然排序和搜索排序是两个不同的部门 想想也应该是这样子,而且作为一家大公司来讲,追求的应该是长期可持续发展的收入,而不是杀鸡取卵。 更换空间需要保留旧空间一段时间 我个人觉得很有必要,而且很有可能baiduSpider会把域名DNS自己做缓存,所以需要保留旧空间一段时间,也是很有道理的。 百度是支持nofollow的 这是肯定的,就算现在支持不好,以后也肯定是这个趋势。不过这个问题应该难不倒百度的工程师。 百度对Https协议的支持很有限 可以公开的内容就公开吧。 site语法原本就不是查网站收录数的 title和description原则不要做太大的修改 URL尽量静态化 人性化的URL也是用户体验的一种表现,友好的URL甚至可以让用户直接输入URL来网站的内容。 国外空间对于排名没有影响 关键是访问速度和响应时间。 以上就是我看了百度官方的搜索引擎优化指南的一些内容,其实说起来,大家都了解了,只不过是官方发出来的,自然就更坚定了大家的想法。

Posted in SEO | Tagged , | 2 Comments

Unix IO模型学习

这季度学习java nio及其相关的内容和框架,所以就想先看看Unix下的一些IO模型。结合网络上的资料进行学习,自己也写篇日志,加强一下理解吧。 POSIX中对同步IO和异步IO的规定: 同步IO操作:引起进程的阻塞直到IO操作完成 异步IO操作:IO操作不会引起进程阻塞 在UNIX下,有5中操作模型: 阻塞IO 非阻塞IO IO复用 信号驱动IO 异步IO 按照网络上的说法,前四种是属于同步IO,第五种才属于异步IO,对于这个结论,我的理解是根据用户进程是否阻塞来判断的(而不是内核进程)。关于同步和异步的一些讨论,可以参考http://bbs.chinaunix.net/viewthread.php?tid=947563 阻塞IO 这是我们熟悉的IO模型,一个进程在作IO操作时,非要等到数据从内核空间拷贝到用户进程空间,才会返回。这个模型的优点就是简单,而且在阻塞的时候,CPU还可以进行调度,去执行别的进程。 非阻塞IO 一开始我看是非阻塞IO,觉得应该要比阻塞IO模型先进,可是当我一看使用方法的时候,就知道这个模型是不会被实际使用的,仅仅只能作为理论上存在的IO模型。这个模型的观点是:进行IO操作的时候,不阻塞,如果没有数据准备好,就直接返回错误码(或者是别的代码)。因此,使用者就只能不断进行轮询来调用IO函数。这样的后果就是,不仅在宏观上形成了与阻塞IO一共的“阻塞”效果,而且在微观上,CPU一直被用来轮询,造成了CPU的浪费。所以,这个模型还不如阻塞IO模型实用。 IO复用 对于IO复用,我的理解有三点: 在一次系统调用中,实现了询问多个描述符的IO准备情况 —— 根据事件通知 为了实现第一点,就需要把阻塞的地方进行转移。把一次系统调用,分为两次系统调用。第一次系统调用可以询问多个描述符的IO准备情况,在这个地方进行阻塞;而第二次系统调用,是针对已经准备好IO的描述符进行调用,此时,理论上(按照我的理解),也是会发生阻塞的,只不过是此时内核已经把数据准备好了,阻塞的时间可以忽略不计罢了。 本质上,还是阻塞的。 信号IO 我们都知道,信号是UNIX提供了进程间进行通信的一种方式。我们常用的 kill -9 命令(kill是向进程传递信号量,9只是众多信号中的一个代号),或者是 Ctrl + C 的时候,就是向某个进程发出终止的信号,这样进程就退出了。 而对于信号IO的模型,我是这么理解的:进程在发起IO操作,系统调用之后,直接访问,内核会在IO数据准备好之后,以某个信号通知发起IO操作的进程,从而使得该进程的信号处理函数可以读取IO数据的操作。 本质上,这也是阻塞的IO模型,因为在信号处理函数中,同样也是要进行阻塞的,只是在在这个时候发起系统系统,内核已经把数据准备好了。 异步IO 这是真正的异步IO了。实现的机制是:用户在发起异步IO的系统调用时,会把相应的数据处理函数作为回调函数,等到IO数据准备好,内核会主动调用此回调函数。可以看出,用户进程在这种模型下,只调用了一次系统调用,而且是立即返回的,因此,就不会出现让进程阻塞的情况,也就符合了POSIX中异步IO的定义。 其实我理解起来,思路是和信号IO差不多的,唯一不同的地方,对于IO数据的操作,异步IO是由内核主动发起的,而信号IO是由用户进程发起的。 以上是我结合网络资料,对UNIX IO模型的一些学习和理解,如果有错误或者不当的地方,请随时留言指出,谢谢!

Posted in NIO | Tagged , , , , | 2 Comments