标签归档:linux

Linux进程创建

Linux进程创建很特别。许多其他的操作系统都提供了产生(spawn)进程的机制,首先在新的地址空间里创建进程,读入可执行文件,最后开始执行。Linux通常采用了与众不同的实现方式,他把上述步骤分解到两个单独的函数(步骤)中去执行:fork()和exec()。 首先fork()通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅是多了一个PPID(父进程的进程号,子进程将其设定为被拷贝进程的PID),当然PID也是不同的,不过每个进程的PID都是不同的,要不然操作系统就没法识别和调度了。 exec()函数负责读取可执行文件并将其再如地址空间开始运行。把这两个函数组合起来使用效果和其他系统使用的单一函数效果相似。 fork()是通过简单的资源拷贝来实现创建子进程,尽管子进程有那么点和父进程的区别,这种通过简单拷贝实现的进程创建是非常低效率和耗资源的,因此人们想着去怎么提高这个效率,最后采用了一种类似与程序设计中的延迟绑定的措施,也就是“写时拷贝”。所谓写时拷贝就是内核在创建进程时不复制整个进程的地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要写入的时候数据才会被复制到新的地址空间中,从而是个进程拥有各自的拷贝,也就是说在此之前都是以只读方式实现共享,何种技术使地址空间上的页拷贝被推迟到实际发生写入的时候。在页根本不会被写入的情况下,就无需再复制了。 废话了这么多,实际上也就是说Linux进程的创建是通过拷贝来实现的,然后对这个拷贝方式和时间进行了优化,出现了写时拷贝这么个东西。

发表在 Operating System | 标签为 | 留下评论

七层负载均衡与静态文件缓存

这个标题有点吓人,又是负载均衡又是缓存,随便哪个都能写好几本书了,这里浅谈一二,适合新手,老鸟请绕道,个人的一些浅薄观点。 很多大公司在七层上做负载均衡大多基于硬件,比如F5,假如流量真的大到不行了,或者是钱多的烧包,那么买一个这种设备肯定是不二的选择,省去多少事情啊,不用搭建环境,不用搞很多测试,只要照着说明文档或者去厂方培训几天就可以了。 七层设备出了F5还有很多,在七层上做负载均衡的软件业很多,比如大名鼎鼎的HaProxy,比如配上第三方工具的LVS,甚至因为负载均衡的重要性,很多具有前瞻性的Web服务器开始提供这样的功能,比如nginx,比如light httpd,nginx的七层负载均衡实际上还是很不完善的,当后端代理一台机器死掉后,nginx还会发送请求给这个机器,这个机器不处理,那么nginx就会一直等待超时,在超时后再将请求分配给其他的机器,在流量大时会很影响性能,造成一定程度的连接堆积甚至堵塞,nginx的负载均衡算法也相对少很多,没有haproxy和LVS多,当然后者是专业负载均衡软件。 静态文件缓存也有很多,比如不朽的squid,比如最近两年很火的varnish,甚至号称比squid更快速更精准的nginx的模块ncache,varnish使用的Visual Page Cache技术能够显著降低内存和磁盘的交换次数,使系统利用率更高,我没有在百万级以上环境检测过varnish,很多人说varnish不是足够的稳定,我测试的时候没有发生什么问题。 静态文件缓存一般都不止一台,我一直推崇使用七层负载均衡来设计静态缓存架构,因为可以降低重复率,降低重复率自然是提高利用率。URL HASH能够很好的解决缓存浪费的情况,比如用户头像放在一台机器上,模板中的小文件放在另外一台机器上,利用七层负载均衡就很容易让头像的请求命中头像服务器,模板请求命中模板缓存服务器,避免了三层或者四层负载均衡重复缓存导致的硬件利用率低下问题。而且服务单一,新切换的缓存机器,很容易重新缓存满。 七层负载均衡和四层负载均衡相比,最大的缺点就是没有四层的负载能力高,Haproxy据说能跑到40万并发,LVS有几百万,这些都是理论上的数据,真的跑到40万的时候,服务器网卡早就挂了

发表在 Operating System | 标签为 , | 2 条评论

linux进程管理笔记

进程是操作系统最基本抽象之一。一个进程就是处于执行器的程序(目标码粗放在某种介质上)。但进程不仅仅局限于一段可执行程序代码(Unix称之为text section),通常进程还包括其他资源,如打开的文件、挂起的信号、内核内部的数据、处理器状态、地址空间及一个和多个执行线程、当然还包括用来存放全局变量的数据段等,实际上,进程就是正在执行的程序代码的活标本。 1)进程描述符及任务结构 在很多介绍Linux进程描述的文章中,有些将内核的进程存放称之为task array,在阅读linux/sched.h头文件中代码可知,实际上进程存放是以链表的形式存放的,单个数据结构是一个task_struct的结构,因此叫做task list更准确一些。task_struct相对比较大,在32位机器上,大约1.7k。Linux通过slab分配器来分配task_struct,用这个来分配的好处是能达到对象复用和cache coloring(翻译成“缓存着色”太别扭了,也很难理解),实际上就是一个预分配的过程,这样可以减少动态创建和销毁带来的系列开销。 2)进程描述存放 内核通过唯一的进程标示值来存放和标示每个进程(PID)。PID默认的最大值为32768,是int类型,可以增加到类型允许的最大值,对于普通的桌面系统或者server来说默认最大值已经足够,对于大型服务器可能需要更多的进程数,只需要修改/proc/sys/kernel/pid_max来提高上限。 3)进程状态 TASK_RUNNING,进程正在执行,用户空间的唯一状态 TASK_INTERRUPTIBLE,被阻塞,等待恢复的状态。 TASK_UNINTERUPTIBLE ,除了不因为接收到信号而唤醒之外,和上面的一个相同 TASK_ZOMBIE 僵死。 TASK_STOPPED进程停止运行,没有运行,也不能投入运行。

发表在 Operating System | 标签为 | 留下评论

linux mail命令学习

功能说明:E-mail管理程序。 语  法:mail [-iInNv][-b][-c][-f][-s][-u][收信人地址] 补充说明:mail是一个文字模式的邮件管理程序,操作的界面不像elm或pine那么容易使用,但功能尚称完整。 参  数: -b 指定密件副本的收信人地址。 -c 指定副本的收信人地址。 -f 读取指定邮件文件中的邮件。 -i 不显示终端发出的信息。 -I 使用互动模式。 -n 程序使用时,不使用mail.rc文件中的设置。 -N 阅读邮件时,不显示邮件的标题。 -s 指定邮件的主题。 -u 读取指定用户的邮件。 -v 执行时,显示详细的信息。

发表在 Operating System | 标签为 | 留下评论

Zabbix详细安装步骤

1.创建ZABBIX的系统账号 为了安全起见建议创建使用zabbix用户运行ZABBIX. useradd zabbix 假如服务器本身已经有规划好的执行用户,此步可以省略 2.解压: tar xvzf zabbix-1.1beta12.tar.gz 3.创建 ZABBIX 数据库 mysql -u test -p >create database zabbix; >quit; cd create/schema cat mysql.sql |mysql -u root -p zabbix cd ../data cat data.sql |mysql -u root -p zabbix cat images_mysql.sql … 继续阅读

发表在 Operating System | 标签为 , | 留下评论

ChinaUnix网络优化论坛上海站总结

在绕了N个圈之后我终于找到了会场,看看时间12点48分,按照规定牛人要13点30开始演讲,到了这个时间,我发现只有51.com 的finalbsd同志到场了,主持会议的草上飞(唐川)说嘉宾正在路上,牛人的时间自然贵点,晚点到场也是应该的,于是我安慰了一下自己,牛人于14点左右差不多陆续来了。 FinalBSD同志的“群服务器负载均衡的开源解决方案”讲的很好,个人理解如下: 1、目前最好的负载均衡的硬件设备是F5和Netscaler,两者基本上属于同质品,所以两者是直接竞争者,不过后者可以将TCP的三次握手全部自己搞定,F5是转发到后端,因此Netscaler具有更高的抗DDOS特性。两者拥有太多的相似点,其中之一就是价格,中小互联网企业根本舍不得买,比如BlogBus。 2、F5、Netscaler都能工作在OSI模型的4~7层中。 3、开源软件解决负载均衡中,HaProxy和LVS相对比较优秀,LVS只能工作在4层中,HaProxy能工作在4~7层,并且提供web的状态查询,LVS可以基于命令行进行管理,HaProxy只能通过配置文件实现,HaProxy配置信息子节点可以继承,也可以重新定义,HaProxy能够实现高层应用,也意味着损失一些性能,当然加入实现同样的功能,和LVS差别不大,HaProxy可以很容易实现备份均衡器配置,加入一组负载均衡的机器倒掉之后,HaProxy会自动切换到备份的一组机器上,并且session等信息可以平滑过渡,好处是用户不需要重新登录、购物车不会因切换而被清空等 4、HaProxy实现了负载均衡的ALC控制,减轻后端的集群压力,但是我怀疑这台负载均衡机器的性能是否足够的好,不然会造成单点故障,当然,可以配置多台负载均衡机器 5、HaProxy比LVS更容易实现CDN加速,具体原因没听明白。 接着淘宝来的同志介绍了XEN实现的虚拟化技术,演讲者的名字我也忘了,改日补上。 1、虚拟化主要是指一分多或者多合一,之所以记住这句话,是我的概念中总是以为虚拟化是一分多,可能日常基础的例子都是这样。虚拟主机,VPS等等。 2、虚拟化能够实现快速拷贝环境,配置好一个环境可以复制任意多份运行,前提是物理机器足够的多和强大。 3、虚拟化软件中,Vmware和XEN效率最高,前者是商业软件,后者是免费开源产品。 4、虚拟化并没有在生产环境中得到大规模的应用,目前都是试验性质的,淘宝几乎所有的测试环境都构建于虚拟环境,但生产环境没有例子。 5、虚拟化可以共享存储,真实系统可以读取到虚拟主机中的任意文件,只要设置正确。 第三个是来自这次活动赞助商梭子鱼的经理的演讲,主要是推销梭子鱼的负载均衡设备,号称只有F5三分之一的价格,通过他滔滔不绝的演讲,让我了解(或者叫猜测)到梭子鱼网络均衡设备便宜的原因,实际上梭子鱼就是一个软件集成的厂商,将几个开源软件修改修改,然后丢进一台开起来很山寨的server中,就可以买到F5三分之一的价格,假如这个也叫便宜的话,我觉得F5应该再提价5倍。 第四位依然是51.com的工程师,讲Mysql的灾备体系。 1、灾备体系就是灾难备份体系,也就是在特别紧急情况下的数据恢复问题,比如911事件后,美国摩根斯坦利第二天就能正常运作,这就得意于他们的灾难备份和恢复体系。 2、灾难备份不仅要同地区备份,还要异地备份,最好能定期存入永久存储介质中。 3、备份中需要注意的几个问题是:备份一致性,备份存储,备份对正在运行的业务影响,备份策略等 4、假如11:00发出备份指令,12:00备份完成,如何保证备份时间中的数据一致性问题,主要解决方案如下 a、 使用从库(slave)进行备份,11:00时对从库加锁,然后进行备份,这样做的缺点是,需要增加架设从库的硬件成本,假如有300台主库(master),那么就需要300个从库,当然,可以通过一台机器启动多个从库来减少一部分成本,假如从库压力不大的话。切记要在从库备份前先flush table,不然很多数据还在内存中,无法被备份。 b、直接使用Mysqldump来备份,优点是不会增加太多成本,缺点是一旦启用dump那么数据库将加锁,业务就会被停止,尽管可能停止很短时间 c、使用snapshot(快照)进行备份,此种备份只适合使用InnoDB的存储引擎,因为在备份开始和结束这短时间中,数据库的所有改动操作全部保存在undo log中,备份完成后通过undo log的前滚来保证备份的一致性。 5、在99.9%的情况下Mysql的安全性是可以得到保证的,还有0.1%情况下是不可靠的,比如你正在执行一个删除操作,然后立刻按住CTRL + C中断删除,你会发现一个神奇的事情,你的数据被删了,bin log中却没有任何记录,也就是说,没法恢复了。 6、淘宝现在的所有后台操作只用十几个oracle就搞定了,可见oracle的性能。 7、oracle和Mysql的搭配能显出更高的效率,比如oracle只写,而用Mysql做同步的只读数据。 我感兴趣的内容总结如上,还有其他的演讲者内容就忽略了,抱歉~~ 演讲的PPT估计过几天ChinaUnix会挂出来,隔几日再奉上。

发表在 Study & Reading | 标签为 , , | 留下评论

用GNUPlot来分析vmstat结果

vmstat查看当前系统运行状态时,不能看出一段时间的趋势,我们常用的流量监控软件Cacti做的非常的棒,事实上也可以通过修改Cacti的脚本监控系统的大部分状态信息,如果你不经常用,只是想分析某段时间的vmstat,或许老外写的这个叫vmplot的脚本比较适合你,如果你没有X11的环境,会有一个这样的提示:set term png small  ,因为终端不支持png显示。你有很大的可能会出现如下错误: gnuplot: unable to open display ” gnuplot: X11 aborted. 这是因为默认会使用X11环境来显示生成的png图片,事实上终端上是肯定做不到的,我就是这样错误的。如果你使用的是tcsh那么请执行下面语句: setenv GNUTERM dumb 如果你使用的是bash,那么执行: export GNUTERM=dumb 关于为什么要执行这样的语句,请看这个帖子肯定比我解释的清楚  当然,说这么多,前提是你已经安装了GNUPlot,然后参考手册输出设备上调整你的显示模式,如果你比较讨厌像蝌蚪一样的英文,这里还有中文版本的手册,你可以根据里面的第六章的设备输出来调整显示状态。在执行这个脚本之前,当然要生成一个数据源,类似这样的: vmstat 1 200 >vmstat.out 1表示间隔时间,200表示总次数,也就是每个1秒取一次样,一共两百次,然后输出的vmstat.out文件中,这个文件名是在脚本中指定的,如果你输出的名字不是这个,你需要修改一下脚本里面的名字。如果你不想改任何东西,那么也可下载我修改过的脚本,虽然显示丑了点,终端环境也就凑合着用吧 附上效果图一张(只是分析一个参数的截图,实际上有7个类似的图):

发表在 Operating System | 标签为 | 一条评论

linux下经典游戏介绍

FPS & ACT Quake II Quake III Arena Unreal Tournament Unreal Tournament 200 Unreal Tournament 200 Soldier of Fortune Heretic II Tribes 2 Heavy Metal Heavy Gear II Postal Plus Rune Rune: Halls of Valhal Return To Castle Wolf RTCW: … 继续阅读

发表在 Excellence Article | 标签为 , | 留下评论

Name or service not known

启动apache出现如下错误: Name or service not known: mod_unique_id: unable to find IPv4 address of *** 其中***为主机名,我的为TT06。 仔细检查了很多地方,没有发现问题,最后发现/etc/hosts中的主机名错误,是我们伟大的系统工程师花开同学 百忙之中将TT06弄成了TT02,主机名错误,改正如下: 127.0.0.1       TT06                  localhost

发表在 Operating System | 标签为 | 留下评论

ubuntu下PDF乱码解决方法

刚刚用PDF查看了一下别人windows上共享的文件,发现左边的书签是正常的中文,内容居然是乱码,想了一下,大概是缺少CJK字符集支持,于是apt-cache search CJK fonts 找到一个poppler-data,接着sudo apt-get install poppler-data ,安装好了,再打开一切OK 事实上这个不仅在PDF乱码的时候有用,在其他文件格式也有用,比如office文件,虽然这些文件很少乱码, 当然,如果你是默认中文安装,这一切都不是问题,在安装系统的时候都已经自动安装了

发表在 Operating System | 标签为 | 留下评论