博客首页|TW首页| 同事录|业界社区
2010-09-29

  文件共享对于我们来说都不会寞生,在企业中搭建文件服务器也是不稀罕的事了。文件服务服务器的建立给我们日常存储文件、共享文件及多部门协作带 来了诸多的便利。但随之而来的是文件太杂、太多、太乱,给IT管理人员带来了明显的不便,存储空间随着时间而慢慢减少,里面的文件也是五花八门。服务器的 警告在不停地提示你已经使用了80-90%的空间了,同事们也在极度地埋怨“怎么存储速度越来越慢了”,IT管理人员也在自言自语“看来该加块大硬盘 了”。或许有人会说磁盘空间不足清理掉不要的文件啊,是,我们应当去清理,但是今天清了,他们说不定明天就给你再放上去些与工作无关的文件,看来这最终不是个解决问题的好办法。

  有没有什么好办法来管理我们的文件服务器呢?有,当然有,俗话说:“魔高一丈,道高一尺”,我们IT人就是来解决问题的,“文件服务器资源管理器”的出现给我们带来的更加简单而便利的工具。在《Windows2008之文件服务器资源管理器》这篇博文中我已经讲到了“文件服务器资源管理器”基本概念和安装方式,在这篇文章中我将带给大家三个策略,向大家详细讲述如何使用“文件服务器资源管理器”。

  在进入主题之前我们需要在文件服务器上创建一个共享文件夹“Share Files”,并建立三个子文件夹“Team1、Team2、Team3”,我将分别利用这三个子文件夹来实现固定大小配额限制、配额扩展限制和主动文件屏蔽。

  策略一 固定大小配额限制

  目的:完成固定大小配额限制,我们将实现Team1文件夹总共存储的文件大小最大限额为50MB,在实际工作中我们可以在服务器上建立每个职员使用自己的个人文件夹存储文件,并将其存储文件的容量按工作需求设置标准配额,减少职员随意存储文件的可能性。

  1、打开“文件服务器资源管理器”。

  2、展开“配额管理”并在“配额模板”上点击右键选择“创建配额模板”。创建配额模板可以方便地按自己所需方式进行自定义设置,在模板完成后将可以随时应用到配额设置中去。

  3、设置一个固定配额为50MB的模板。

  4、设置完成后将在配额模板中可以看到这个模板。

  5、在“配额”上点击右键并选择“创建配额”。

  6、 选择Team1为配额路径,模板为我们自定义的50M模板,并选择“在路径上创建配额”后点击“创建”。如果选择“在现在子文件夹……”选项将会使 Team1下面的子文件也同样具有50M的配额,当然你如果模板在开始没有设置好,也可以通过“定义自定义配额属性”来创建模板。

  7、设置好后我们将可以看到一条匹配模板,现在使用百分比为0,限制为50MB。

  8、我们现在往Team1中放入文件,将它超过文件夹限额后立即会弹出“空间不足”的对话框。

  9、同时在配额中可以看到已经使用的配额百分比发生了变化。

  10、这样设置固定配额是不是可以控制职员的无用文件时不时的往服务器上放呢,因为我们只给了他50MB存储空间,他们要放其它的无用文件肯定是不够了。

  策略二 配额扩展限制

  目的:由于一部分职员的职位特殊,可能给他分配50MB的文件夹存储空间并不能满足他的需求,但我们又不想给他一次性满足他的要求,我们要视他使用的空间的多少来确定,当他超过50MB时我让配额自动调至60MB,当然大小需要按我们实际需求设置。

  1、按上面同样的方法设置一个60MB的模板,并再创建一扩展模板,我们可以选择一个类似的模板进行复制,然后将其限制的大小修改为50MB,选择“通知阈值”中的“警告”并点击“编辑”。

  2、选择“命令”面板并将“命令参数”中的引号部分的参数改为“60 MB 扩展限制”(需与实际名称相符),然后点击“确定”。

  3、模板创建好后,我们可以看到我们创建的三个所需的模板。

  4、同样的方法创建配额,将配额路径设为Team2的路径,模板选择刚才设置的“50MB限制,10MB扩展”的模板再点击“创建”。

  5、创建好后我们可以看到此条模板,它现在使用的百分比为0%。

  6、当我们放入50MB文件时并不会有警告,但放入60MB以上文件时同样会弹出“空间不足”的提示。

  7、放入60MB文件后我们可以在配额中看到已经使用了100%的配额,这样这个文件夹将不能再放东西了,除非你再次去修改配额模板。

  策略三 主动文件屏蔽

  目的: 让职员存储文件时最大的麻烦在于我们无法知道他们会放哪些类型的文件,通常一些exe之类的文件放上来后就可以运行,如果有病毒或木马之类这可是大麻烦。 我们现在要实现的是让大家只存储工作需要的文件,其它例如exe,avi之类文件让他们放不进文件夹中,我们这里用Team3为例。

  1、展开“文件屏蔽管理”后在“文件屏蔽”上点击右键并选择“创建文件屏蔽”。

  2、选择“文件屏蔽路径”为“Team3”所在路径,然后在模板中选择你要屏蔽的文件类型并点击“创建”。

  3、创建成功后地我们将看到此条文件屏蔽记录。

  4、如果你想修改屏蔽文件的类型,那可以直接双击刚创建的记录来修改。

  5、现在我们将一个avi文件放入Team3,将会弹出“你需要权限来执行此操作”的提示,你是无法将此文件放进去的。

  6、当然我们可以更细化哪些类型的文件可放,哪些不能放,这都可以自己来定义的,也是非常容易的事。

  以上三种策略配合我们共享权限设置对相应的文件夹进行设置,将给我们的文件存储带来很大的方便,当然也同时减轻了我们这些IT人员的工作压力。

  前几天与一位企业界的技术人员聊天,谈到他们刚刚通过了CMM3认证,CMM我知道是美国卡内基梅隆大学软件工程研究所搞的一个认证模型,但不清楚到底是谁在组织认证,后来一查,原来也是老美或它们授权的咨询公司在做认证,不由得长叹一口气,果然是一流的搞标准,二流的搞技术,三流的用别人的技术迎合标准来生产产品。联想到最近借着共享平台浪潮而火热无比的OGC标准,我觉得保不齐哪天OpenGIS也会搞个OGC产品认证,作为走向国际的GIS软件的强制性和事实性标准,成为一个技术门槛,信夫?!

  洋人玩标准和概念也不是一天两天了,而是轻车熟路,玩的倍儿活泛。大家回忆看看,三四个英文大写字母,就构成了一个专有名词,什么“Chimerica(中美国)”、“BRICs(金砖四国)”,什么 OGC、什么WMS。早两年高出一个“Cloud”来,接着受到Google和Amazon的推崇和追捧,互联网上到处都是“云”了,而且甭管IT公司大小,还都不落于人后。早先的一些“云应用”我也曾经玩过,什么云存储、云备份,后来国内的云声音逐渐高涨,什么云杀毒之类的东西都冒出来了,反正跟上了术语就跟上了潮流,在“云”的年代,再宣传什么“分布式”之类的玩意,好像都过失了。

  过不过时我们先单说,云GIS这玩意,你要说靠谱也有现成的例子,比如ArcGIS.com的那些在线地图服务,就不错,你要一定称之为“云”,也说得过去,反正“云”现在就是一个框,什么乱七八糟的东西都能够往里面塞进去。但在国内,要大张旗鼓地搞云GIS,怕是还要再等几年,因为这不靠谱的事情太多了。

  第一是“云”的运营商不靠谱,国内的互联网环境,政策因素太强,甭管多大的公司,别把自己太当回事情。比如Google,在Geek们眼中简直是梦幻之地,但由于惨呼到政治中来,还不是一个大嘴巴给扇到香港去了。连技术如此过硬,口碑还算不错的大公司都不一定靠得住,我就更不相信国内的民营“云”托管商,要是哪一天人家的云化作了雨,你连讲道理的地方都找不到。有人说民营不行,国家搞几个官办的云,总该靠谱吧。如果中移动中电信搞几个云,靠谱程度肯定是高的,不过服务的质量肯定是低的,但凡是垄断,就没有什么好货出来。多搞几家?鲶鱼效应?别逗了,我们的鲶鱼不会催着其他的鱼跑,而是会一起结成利益同盟滴——反正市场大的很,大家都处于没吃饱的状态,多进来几条鱼,立马就能给洗黑了!

  第二个是GIS内容的不靠谱,数据质量和信度太差。先不说国家法律允不允许构建一个可以真正投入使用的“GIS云”(君不见每块发布的地图都有审图号么?!),哪怕有一天,我们的政策真的如美国那样开放,地图在互联网上能够到处开花,还得再问问,这些构成云的“水蒸汽”从何而来。从何而来,各省市区县,都成云了,这不是要砸靠数据生产卖钱的单位的饭碗么。真的有了“GIS云”,怕是这些“水蒸汽”也是惨不忍睹,就剩一个空架子在那里。

  在看“云”方面的资料时,我也特意在Google趋势上查询了一下最近这几年冒出来的IT术语的趋势,也顺便回顾了一下最近两三年的一些重要IT事件,一个很感慨的地方是:那些具有“工程师精神”——即以技术为本的公司——逐渐被“概念型服务”公司吃掉、兼并和购买。

  所谓工程师精神,可以大概概括为以技术为本,特别钻研,专心做事,一丝不苟,讲究技术完美主义的气质。德国人,日本人,以及80-90年代的美国人,都具有这种气质,像当年的摩托罗拉、AT&T贝尔实验室、SUN等等,都在技术上下了极大的功夫,真正引领的技术发展潮流和时代潮流。可是后来随着90年代末硅谷的“IT泡沫”一来,这下可好,都去办网站搞上市圈钞票了,真正成了“会做的不如会写的,会写的不如会说的”,最后的赢家成了PPT狂人。当然,咱们国内也是这股风气,而且这股风气还早流传了上千年——想当年那些技人们不是被称之为“奇技淫巧” 么。什么好处都让会讲PPT的市场人员得了,再告诫技术人员要沉下心来钻研,不是幼稚可笑,便是别有用心。不改变这股浮躁的风气,以后“金融资本吃掉产业资本”的事情会越来越多,越来越盛。

  这也就能解释现在满世界的“云”了,无他,软件这几年没有出现过惊艳一时的技术,已经远远落后于硬件的水平。那些Facebook,Twitter,Foursquare等等,都是应用模式,而不是软件革命。可是,公司要生存,大家要吃饭,怎么办?“旧瓶装新酒”呗!反正编一堆名词并给出个自洽的体系也不是难事,就像那SOA,不就是软件模块之间的“黑玉断续膏”么,但你看那些大神们的“分析”“研究”和 “感悟”,反正就要让你“肃然起敬”。把简单的东西忽悠复杂了,就是现在搞市场的这帮人的拿手好戏——在最疯狂的那阵,我们不是天天听到樱桃红、莱茵兰,宝石黑之类的颜色“术语”么,你们就继续瞎编吧!

  有人的地方就有江湖,有江湖的地方就会有争斗。然而不管是与人争斗还是与怪物争斗,若是能掌握一门极强的特殊攻击技,作为自己的超必杀,在关键之时发出,不仅能稳操胜劵,还能让敌人败得心服口服,完全制压并折磨敌人,着实是一件令人心情舒畅的事。在各种的网游之中,究竟有哪些的PK特技可以发挥出这种作用呢?下面我们就来一起盘点。

  3D代表游戏:

  3D游戏已经越来越成为网游的主流。而游戏中必杀技的效果也是越来越眩目。这里就选取两个代表游戏《魔兽世界》和《神泣》的代表必杀技来加以说明:

  【《神泣》女王的号令】

  《神泣》里战士的必杀技:“女王的号令”可以给予目标及周围5m内敌人自身血量87%伤害攻击(部分怪物具有抗性)。想象一下,瞬间减去对手近九成的体力是何等恐怖的攻击,配合战士和斗士本身出众的攻击力,这招足以让对手在几秒钟内毫无悬念地倒地,而在多人混战中,这招很有可能成为“一发逆转”的关键。

  【《魔兽世界》:利刃风暴】

  《魔兽世界》战士的利刃风暴(俗称大风车)可以对附近的最多个目标发动旋风斩,在接下来的6秒内,每1秒会发动一次旋风斩。该技能十分恐怖,配合强大的装备常常让对手无所遁形。

  可能由于该技能实在强大,在大灾变测试版本中利刃风暴作出了修改。利刃风暴现在可以被缴械了。这条消息可以说犹如晴空霹雳引来轩然大波,很多战士玩家在官方论坛抗议。

  2D代表游戏

  2D即时游戏自《UO》开始,已经有十余个年头了。在中国2D即时游戏的代表自然是《传奇》。《传奇》在几年后,也更新了属于自己的特色必杀技。而在2010年最新的2D即时游戏中,刚刚内测《降龙之剑》的“SXP”必杀技设定也有着与众不同的地方。

  【《传奇》 白日门疾光】

  经典PK网游《传奇》中自然也少不了必杀技,如“白日门疾光”技能: 能能够使剑气凝聚成形,瞬间化作一道光影,突袭身前四格内的敌人。

  这是一种破坏力极强的直线远距离攻击,而如同烈火剑法一样,它也需要一定的时间,让剑气凝聚在战士的武器之上。但是瞬间爆发的威力非常惊人,能达到一击必杀的效果,在PK时,这一招的确很管用。

  【《降龙之剑》 SXP技】

  SXP技,是2D即时激战网游《降龙之剑》中最具杀伤力的必杀技能,六大职业都拥有属于自己的专属SXP,SXP技能拥有超大的打击范围,而且能够超越屏幕的极限,攻击到屏幕外的怪物。

  配合3D缩放技术下,4倍的视野,SXP技能全屏打击范围的感官还是相当畅快的。特别是在BOSS战和千人家族战的时候,SXP技能的适时施展,常让人有惊喜之感。从游戏内测的几天来情况看,SXP技也是玩家最经常讨论的话题之一。

  2.5D代表游戏

  除了3D和2D,还有在他们之间的2.5D游戏。大家第一次见到2.5D游戏,应该还要追述到几年前的《仙境传说》,在RO中,其实也有许多让人记忆犹新的必杀技。

  【《仙境传说》:阿修罗霸凰拳】

  自从《仙境传说》5.0版本“梦想天空”开放新二转职业以来,武僧便成为了很多人的最爱,就是因为招牌秒杀技:阿修罗霸凰拳。阿修罗霸凰拳需要在爆气和5个气弹的状态下方能直接使用,用所有的SP放出“必杀一击”。

  很多玩家这“华丽的一击必杀”倾倒,纷纷加入武僧的行列。可爱的服侍摇身一变,化身为最强的杀人机器。8.0 《黑色派对》的开放,武僧转生成为武术宗师,阿修罗霸凰拳的威力更是直线飚升。

  横版代表游戏

  横版游戏一般以爽快的手感和极富打击感的技能为吸引玩家的卖点。在这类型的游戏中,光彩夺目的技能是必不可少的要素。目前最的最好的,有且只有《DNF》。

  【《DNF》:煌龙偃月】

  DNF中的煌龙偃月技能可以召唤出煌龙偃月刀刺击前方敌人,并把其推到偃月刀尖部,而且刀尖周围的龙之炫纹会引发爆炸并给予周围敌人极大伤害。在拥有大量炫纹的前提下施放,伤害非常恐怖。更可怕的是这个技能还可以连续施放,让多少敌人闻风丧胆。

  后记:PK中使用必杀技给玩家带来最大的感受就是爽快,让敌人瞬间卧倒的感觉实在足矣让每根汗毛都为之一震,当然,修炼必杀技也是要付出诸多的艰辛和银子的,也有的必杀技会有与对手同归于尽的后果,不管怎样,为了那华丽的一击,就让我们尽情地嗜血吧!

2010-09-26

  大家都知道initrd 是linux 启动的内存文件系统,那他里面有都是什么呢?今天就看看如何打开这个文件系统!

  initrd = init ramdisk,是一个启动时存在于内存的文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上。

  Linux启动一定要用initrd么?

  不必,如果把需要的功能全都编译到内核中(非模块方式),只需要一个内核文件即可,initrd能够减小启动内核的体积并增加灵活性。如果你的内核以模块方式支持某种文件系统(例如ext3, UFS),而启动阶段的驱动模块(如****d)放在这些文件系统上,内核是无法读取文件系统的,从而只能通过initrd的虚拟文件系统来装载这些模块。

  这里有些人会问: 既然内核此时不能读取文件系统,那内核的文件是怎么装入内存中的呢?答案很简单,Grub是file-system sensitive的,能够识别常见的文件系统。

  initrd文件是怎么生成的?

  使用mkinitrd命令,这个命令其实是一个Bash脚本

  #file `which mkinitrd`

  /sbin/mkinitrd: Bourne-Again shell script text executable

  该脚本先建立一个8M的空文件,并在此上建立一个文件系统,并拷贝相应的的文件。

  一个默认RedHat Fedora Core 2, 它的initrd是什么内容

  (跟系统的硬件相关)?

  # file initrd-2.6.5-1.358.img

  initrd-2.6.5-1.358.img: gzip compressed data, from Unix, max compression

  # mv initrd-2.6.5-1.358.img initrd-2.6.5-1.358.gz

  # gzip -d initrd-2.6.5-1.358.gz

  # ll

  -rw-r–r– 1 root root 8192000 Jan 14 11:32 initrd-2.6.5-1.358

  # mkdir /mnt/loop

  # mount -o loop initrd-2.6.5-1.356 /mnt/loop

  ………… 中间修改此文件系统,等等…………

  # umount loop

  # cd /boot

  # gzip -9 initrd-2.6.5-1.356

  # mv initrd-2.6.5-1.356.gz initrd-2.6.5-1.356.img

  方法2:

  mv initrd-2.6.5.13.58.img initrd.gz

  gzip -d initrd.gz(这时候会解开文件包。变成一个initrd的文件)

  mount -t proc initrd /mnt

  cd /mnt

  ls 就可以看到里面的内容了!!

  方法3:最新文件系统

  mv initrd-2.6.5.13.58.img initrd.gz

  gzip -d initrd.gz

  cpio -idv < initrd

  十年前,掀起舶来品中国热的狂潮,而自主研发的本土网游几近为零;

  十年后,本土网游数百款的年产量,而玩家铭记于心的网游未曾出现;

  八零后玩家最初的感动——《传奇》;九零后玩家脑残的代名词——《劲舞团》;零零后玩家新一代的归宿——?

  ——题记

 

  国产网游已经风风雨雨走过十年艰辛的道路,从最初的几近为韩国网游所垄断,到大量的国产网游面世及取得市场份额,都庄严并且郑重地向世界宣告着中国网游在世界范围内的崛起。

  另据艾瑞统计数据显示,国产网游已经占据目前网游市场总体份额近50%的市场比例。所以在国产网游不断前进的十年之后,相当多数人纷纷表示,真正属于国产网游当家做主的时代已经来临。

  然而事实却远非市场数据所带给我们的那样真实。连日来,有关于《最终幻想14》、《C9》、《上古世纪》、《怪物猎人OL》等众多国外重量级大作纷沓而至的消息从未间断。这无疑昭示着中国网游产业,舶来品于十年后再次卷土重来,意欲重新瓜分国产网游市场。

  与此同时,让我们再度审视国产网游现状,产品同质化严重、高端核心技术匮乏、产品山寨风靡、网游服务能力低下等等因素不断冲击着国产网游的良性发展。而如此之多日积月累的诟病使得国产网游的市场反响远远没有舶来品网游的声音强烈。

  当然,由于当前网游整体市场的反响以及新游的不断横空出世,使得我们不能够妄自菲薄,而应当背水一战!那么,我们再次回顾国产网游走过的艰辛历程,悉数当前国产网游的整体市场现状,以及对各厂商旗下支柱产品的透析,真正要与即将登陆的舶来品背水一战的网游究竟是谁?

  其实业内人士都明白,无论当前的新网游如何之多,反响如何之大,但对于各厂商旗下历时多年运营的传统网游的盈收份额并未造成多么强烈的冲击。所以,即使面铺天盖地的舶来品网游再度卷土重来之时,真正需要面对并且与之交锋的其实是已经历时多年运营的传统网游。那么,让我们十年后再回首,那些历时运营多年的“钻石级”网游,究竟还能否成为气候?

  《传奇》之“海底世界”

  提及《传奇》,对于网游群体并不陌生。伴随着国产网游的十年发展,《传奇》一直在以其宠辱不惊的精神向前来挑战的后生小辈们传达着不败的“传奇”。时至当下,《传奇》依然占据着盛大游戏50%以上的盈收份额。伴随着后来《传奇》团队被盛大的收购,这款网游或许便不能再称之为舶来品,因为已然在不断更新换代的过程中融入了大量的中国元素,也更加倾向于中国的环境因素。

  十年之后的今天,《传奇》自身依然没有停止过自我的不断突破,已经数也数不清的资料片推出,已经说也说不完的版本数量,到而今依然人气高昂、风采依旧,并且推出了最新的资料片“海底世界”,以及最新爆料的3D版本开发,都让我们对这款游戏心存敬意而无任何非议。

  《航海世纪》之“荣誉要塞”

  当中国的网游大门被国外网游打开近三年之久后,依然没有一款民族网游走出国门。《航海世纪》的诞生,让真正代表中国的国产网游正式走向世界,并且返销第一站便是韩国,时至今日,《航海世纪》已经传播到全球数十个国家,在国内也已运营达六年之久。

  这款可以媲美网络版《大航海时代》的国产3D网游,也同样进行了不断的自我突破,全新资料片“荣誉要塞”更是对中国人的海洋情结以及国产网游蓬勃发展最好的慰藉。

  《梦幻西游》之“唯美版”

  作为“梦幻”系列的回合制大师级网游,《梦幻西游》的位置早已超越其兄长《大话西游》。最高峰值近250万同时在线的数据无疑是广大玩家对其喜爱与狂热追逐的最强力证明。

  历时运营近七年的《梦幻西游》,并未让我们感觉到她的疲乏,随着“唯美版”的推出以及重量级的代言人物让我们相信,她将会走得更远更成功。

  《完美世界》之“经典版”

  相信当很多人无意中听到水木年华的声音便会记忆起《完美世界》。这款由中国自主研发的3D引擎制作的网游,在当时的环境下所达到的画面效果即便在现在看来也是让人顿感欣喜的。

  历时运营五年之久后,我们终于再次聆听到她大规模的声音。伴随着“经典版”出现在我们的视野,跨服战场的大规模造势,让我们看到了如今的《完美世界》,依然傲立在国产网游唯有“古董”才会让人铭记的潮流之中。

  结语:

  历经十年的发展,让我们能够牢记于心的不是新网游,而是已经与时代开始脱节的老古董。“80后”回味最初网游的美好,却尽是传奇、魔力宝贝、奇迹世界等舶来品带给我们的感动。而现在,在国产网游后十年,难道要再次将这种悲剧的感动留给又一代人吗?舶来品的卷土重来,传统网游的回光返照,年产量近百款的民族新网游究竟何时才能带给我们如传统网游般的惊奇与感动?

  “90后”与“80后”相同,均出生在中国改革开放后,但不同的是,“90后”在出生时改革开放已经显现出明显成效,同时也是中国信息飞速发展的年代。所以“90后”可以说是信息时代的优先体验者。这是“80后”无法比拟的先天优势。由于中国计划生育政策的影响,“90后”普遍为独生子女,目前多数尚未成年。由于时代的发展和变化,“90后”的思想与理念与老一辈中国人有很大的不同,同时有着不同于前人的价值观和行为方式。虽然社会上不乏对“90后”的批评,但“90后”的社会价值也渐渐得到了许多人的认可。

  一个时代的人们不是担起属于他们时代的变革的重负,便是在它的压力之下死于荒野。“5·12”四川汶川大地震,“90后”新生代的沉着镇定、坚强勇敢却不得不让抱有成见的人所刮目相看,一个个年幼孩子的英雄故事不由得人们不敬佩不已、感动不已。他们直面灾难、毫不退缩,奋不顾身、舍己救人,敢于担当、勇于负责,“90后”用他们的实际行动改观了人们以往的评价。2009年10月1日,是中华人民共和国成立60周年的日子,参加本次阅兵的部队的主体是“80后”、“90后”新一代官兵,他们的表现也是令人赞赏。显然“90后”已经担起了时代给予他们的重负。

  “90后”从出生开始生活环境相对前几代优越许多,但是有时候会跟“70后”,“80后”的人产生代沟。“90后”的人追求的是新潮!没有经历过历史和政治上的动荡,也没有经历过大的经济波动。这个时代的90后是幸福的,她们没有“70后”和“80后”成长中的诸多烦恼,多了许多可以消遣解闷的方式,包括与他们骂名相关的网游。

  因为某劲舞类休闲网游,“90后”得到了前所未有的指责和唾骂。然而网游无论对于“70后”、“80后”还是“90后”的意义都是一样的,只是“90后”为之付出的更多惨重的代价。只要不沉迷于网游、不扰乱生活,适当的娱乐未尝不可。社会要用统一标准衡量“90后”的言行举止。

  由于整个变革中的社会对“90后”的影响,普遍地早熟,他们从一开始,就乐意成为消费社会、技术时代的宠儿。所以一些新技术和新概念的3D网游只要问世,“90后”便蜂拥而上。而实质这些不见得可以给“90后”带来快乐和丰富生活。反而一些国产2D游戏更具内涵和娱乐性,因为中国游戏开发技术中2D及时更加成熟,所一些极具文化内涵的题材多数都选择开发更成熟的2D网游,如《西游记》、《东邪西毒》、《大明龙权》等。另外一些不需要升级的休闲类网游也是个不错的选择,但是一些宣扬庸俗文化的网游真的不适合你们。

  年龄越轻,接触的新事物就越多,所以要懂得取舍。90后,末让青春付流水。

2010-09-25

  当您的 UNIX® 系统运行迟缓的时候,及时发现问题是至关重要的,这样就可以使得系统恢复到正常的运行模式。有许多原因都会导致系统运行迟缓,但有效地确定问题可能相当困难。在本文中,通过一些学习示例介绍了如何确定和诊断导致您的 UNIX 系统运行迟缓的原因,以便使计算机重新恢复到正常运行状态。

  通常,UNIX® 管理员都拥有一套他/她经常使用的用来辅助进程管理任务的实用程序、技巧和系统。有一些重要的实用程序、命令行以及脚本可用来简化各种处理过程。这些工具中有一部分来自于操作系统,而大部分的技巧则来源于长期的经验和简化系统管理员工作的要求。本系列文章主要专注于最大限度地利用各种 UNIX 环境中可用的工具,包括简化异类环境中管理任务的方法。

  导致系统运行迟缓的原因

  有许多不同的潜在的原因会导致系统运行迟缓,但通常可以将它们分为以下几个方面:

  进程太多。您的系统可能仅仅只是同时运行了太多的应用程序,或者正在运行少量 CPU 密集型的操作。要么是服务器超负荷运行,要么是失控进程耗尽了系统资源。

  活动内存太多。如果进程使用了大量的内存,那么系统可能会从磁盘换入大量的页面并将大量的页面换出到磁盘,这意味着您的系统花费在内存交换上的时间比真正使用内存的时间更多。

  硬件故障。有时候,您会碰到导致系统运行迟缓的硬件故障。不能正常工作的网卡、硬盘或内存,都可能导致系统花费很长的时间等待信息。

  要对该问题进行诊断,您需要使用大量可用的工具来检查您的 UNIX 系统。

  选择连接方法

  如果您的计算机运行得特别慢,那么第一个问题是如何连接到该计算机以便启动监视进程。运行迟缓的计算机可能无法接受 Telnet 或通过远程 Shell 协议(如 ssh)的连接。

  如果您尚未登录到系统,那么可能根本无法进行访问。相反,可以考虑直接或通过独立的硬件解决方案(如网络或基于串口的控制台监视器)来使用控制台。

  这种控制台更有可能允许您登录到系统,因为已经有一个登录进程(您的 Shell 将会代替它)正在运行。如果在登录到系统后,您无法通过 Shell 运行任何进程,则表示系统已经耗尽了进程空间,那么重新启动可能是使系统恢复正常的唯一办法。

  要重新启动系统,请使用 init 或 telinit 来调整运行级别,运行级别 6 通常表示重新启动。使用 init/telinit 更有可能重新启动系统,因为在进行重新启动时仅涉及到了一个进程。

  在系统启动并运行后,您需要使用本文中介绍的一些技巧来监视该系统的运行状态并记录其输出结果。如果再次出现系统运行迟缓的情况,您可以执行事后检查调试并分析系统运行迟缓的原因。

  使用 uptime

  如果您怀疑计算机运行得很慢,那么您应该运行的第一个命令是 uptime。Uptime 报告当前时间、计算机启动和运行时间(换句话说,是从计算机启动以来的时间)以及当前的用户数。然后它会提供三幅图表,以显示最近 1 分钟、5 分钟和 15 分钟的平均负载。例如:

  $ uptime

  18:28:54 up 10 days, 8:38, 2 users, load average: 2.24, 5.34, 3.42

  在这个示例中,该计算机在最近 1 分钟、5 分钟和 15 分钟内的平均负载分别超过了 2、5 和 3。

  平均负载的定义比较复杂,并且受到正在执行的进程的状态影响。通常,正在运行、等待 CPU 或等待 I/O 的每个进程都会使平均负载加 1。然后对这些图表进行计算并根据时间平均。

  在单 CPU 的系统中,平均负载大于 1 则表示该 CPU 难以承受您所分配的负载类型。但是因为 UNIX 的多进程的本质,在您关注到该问题前,平均负载在长时间内(换句话说,对应于 15 分钟的图表)达到 2 通常是可以接受的。

  在多 CPU(或多核)系统中,需要将平均负载除以 CPU 的个数。要确定计算机是否超负荷运行,请使用上述原则。

  查看这些图表的另一种可选的方法是将它们看作百分比,换句话说,如果上面的图表来自于一个单 CPU 系统,那么如果该计算机的速度比目前快百分之 224,那么它就能够处理当前的负载。

  在多 CPU 系统中,您应该使用 CPU 数目加 1 来确定最大负载。例如,一个 4 CPU 的系统可以承受的最大平均负载为 5。

  通常在短时间内,计算机的平均负载可能比其最大平均负载高的多。例如,当构建或编译一个应用程序、或执行一项磁盘密集型任务时,平均负载可能会激增。这正是输出结果中包含 1、5 和 15 分钟平均值的原因,因为这样可以帮助消除任何瞬态负载极大值。

  任何长时间的或未预料到的较高的值都可能表示存在问题,并且需要进行进一步的研究。如果这些数值较低,但系统却运行迟缓,那么可能表示存在交换空间的问题。

  使用 ruptime

  如果您管理着由许多系统组成的大型网络,那么有一种简单的方法来监视负载和网络中所有计算机的使用情况。ruptime 工具收集网络上所有计算机广播的数据,并将其集中到一个本地文件中,以便对所有计算机的当前状态进行检查。

  例如,清单 1 显示了一个小型网络的输出结果:

  清单 1. 一个小型网络的输出

  $ ruptime

  bear up 10+09:13, 2 users, load 0.66, 0.68, 0.50

  ultra3 up 6+01:16, 1 user, load 0.00, 0.00, 0.00

  atuin down 4+00:52

  最后一台计算机 11 分钟内没有报告任何数据,所以将其列为停机。

  要生成这些信息,需要在本地网络中的每台计算机上运行 rwhod 守护进程(有时候是 in.rwhod)。这个守护进程为本地计算机广播信息,并收集来自所有其他计算机的广播数据。

  因为 rwho/ruptime 系统的工作方式的原因,所以可能存在一些性能问题,尤其是在大型的网络中,它们生成的大量的系统报告和网络流量可能是有害的。在非常繁忙的系统中,对这些数据进行广播的需求可能也就意味着永远无法报告这些信息,这些数据可能过期,或者在系统繁忙时将其报告为停机。

  跟踪大型进程

  如果您怀疑是一个大型的或过度繁忙的进程导致了该问题,那么您应该检查 ps 工具的输出,查找进程大小、内存百分比和 CPU 利用率。在 SVR4 系统(Solaris 和 AIX®)中,您可以使用下列命令来获得进程的列表(请参见清单 2)。

  清单 2. 获得进程列表的命令

  $ ps -A -o pcpu,pmem,rss,vsz,comm

  %CPU %MEM RSS VSZ COMMAND

  0.2 0.0 0 0 fsflush

  0.1 0.2 1464 8288 /usr/lib/ssh/sshd

  0.1 0.1 1032 1320 ps

  0.0 1.0 953****7608 /usr/openwin/bin/Xsun

  0.0 0.7 6312 10720 dtgreet

  0.0 0.6 6136 9352 /usr/sfw/sbin/snmpd

  0.0 0.4 3208 5720 /usr/lib/fm/fmd/fmd

  0.0 0.3 2808 8512 /usr/lib/ssh/sshd

  0.0 0.3 2800 8504 /usr/lib/ssh/sshd

  0.0 0.3 2768 8512 /usr/lib/ssh/sshd

  0.0 0.3 2368 4056 /usr/sbin/nscd

  0.0 0.2 2096 9176 /usr/dt/bin/dtlogin

  …

  清单 3 显示了在 BSD 派生系统中的 ps 工具的输出。

  清单 3. 一个 BSD 系统中获得的进程列表

  $ ps -A -o pcpu,pmem,rss,vsz,command|sort -n +3

  %CPU %MEM RSS VSZ COMMAND

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 152 27236 nfsd-server

  0.0 0.0 164 27236 nfsd-master

  0.0 0.0 224 27240 /usr/sbin/update

  0.0 0.3 4364 29196 /usr/sbin/securityd

  0.0 0.2 2760 29288 jabberd -c /etc/jabber/jabber.xml -H

  /private/var/jabber/ -U jabber

  0.0 0.0 184 29300 nfsiod -n 4

  0.0 0.2 3544 29712 /usr/sbin/configd

  0.0 0.0 500 30628 /usr/sbin/sshd -i

  0.0 0.0 260 30648 /usr/sbin/smbd -D

  0.0 0.0 736 30648 /usr/sbin/smbd -D

  0.0 0.1 1216 30700 /usr/sbin/sshd -i

  …

  0.0 0.1 2180 50664 imapd: narcissus.mcslp.pri [192.168.0.110]

  mc user.mc

  0.0 0.1 2184 50664 imapd: sulaco.mcslp.pri [192.168.0.101]

  mc user.mc

  0.0 0.1 2204 50720 imapd: narcissus.mcslp.pri [192.168.0.110]

  buy user.buy

  0.0 0.1 2264 50720 imapd: sulaco.mcslp.pri [192.168.0.101] buy

  user.buy

  0.0 0.1 2272 50984 imapd: kernel.mcslp.pri [192.168.0.106] slp

  user.slp

  0.0 1.2 18348 54368 servermgrd -x

  0.0 0.2 3200 85920 /usr/sbin/named -f

  0.0 1.1 16820 122240 /usr/libexec/mysqld –basedir=/usr

  –datadir=/var/mysql –user=mysql –pid-file=/var/mysq

  0.0 0.5 8572 158164 /usr/libexec/slapd -d 0 -h ldap:///

  ldapi://%2Fvar%2Frun%2Fldapi

  0.0 0.0 204 289396 rpc.statd

  在上面两个例子中,进程列表中显示了 CPU 和内存使用率,以便您能够清楚地了解系统中的负载情况。‘s’和‘stat’列(分别对应于 SVR4 和 BSD)显示了进程的当前状态。对于大量的运行的进程,状态‘R’表示该进程当前正在运行。

  通过使用状态、CPU 和内存百分比的组合,您应该可以确定是否存在失控的 和大量消耗系统资源的进程。

  使用 iostat

  iostat 工具提供了关于终端、磁盘活动和 CPU 利用率的信息。您可以指定单个数值参数来设置报告的时间间隔,并指定另一个数值参数来设置报告的数量。例如,清单 4 显示了如何每 5 秒钟报告相应的统计信息。

  清单 4. 每隔 5 秒报告统计信息

  $ iostat 5

  tty dad1 sd1 nfs1 cpu

  tin tout kps tps serv kps tps serv kps tps serv us sy wt id

  0 7 440 39 14 0 0 3 0 0 0 5 18 0 77

  0 39 2 0 0 0 0 0 0 0 0 0 0 0 100

  0 13 4 3 0 0 0 0 0 0 0 0 0 0 100

  0 13 0 0 0 0 0 0 0 0 0 0 0 0 100

  对于不同的系统,缺省情况下显示的确切的信息也有所不同,清单 4 来自于一个 Solaris 系统。清单 5 中的示例来自于一个 BSD 环境。

  清单 5. 一个 BSD 系统中的 iostat

  disk1 disk0 cpu

  KB/t tps MB/s KB/t tps MB/s us sy id

  167.67 0 0.02 20.70 5 0.09 6 3 90

  0.00 0 0.00 0.00 0 0.00 15 3 82

  0.00 0 0.00 0.00 0 0.00 16 2 82

  0.00 0 0.00 14.33 24 0.33 18 4 79

  0.00 0 0.00 2.83 1 0.00 23 4 73

  先来看看 CPU 统计信息,这些列分别显示了用户 (us)、系统 (sy) 和空闲 (id) 百分比。用户时间显示了用于该用户进程的时间。系统时间则显示了系统进程耗费的时间(在没有显示等待时间时,包括系统等待 I/O 的时间)。空闲时间显示了 CPU 处于空闲状态的时间的百分比。

  磁盘的输出显示了各个物理磁盘(在合适的情况下包括 NFS 加载)的工作情况,通常以每秒处理事务数和每秒传输的 MB 或 KB 作为单位。其中的较大数值,尤其是同时具有较高的等待/系统时间,可能表示对于该系统而言,磁盘的速度太慢。您可以尝试展开您的应用程序,以便它使用不同的磁盘,这样可能可以改善它的性能。

  如果该磁盘同时用作虚拟内存,那么可能是因为缺少内存和过多的交换的问题。

  使用 vmstat

  您可以使用 vmstat 工具来监视虚拟内存统计信息。与 iostat 一样,它接受一个数值时间间隔(请参见清单 6)。

  清单 6. 使用 vmstat 监视内存统计信息

  $ vmstat 5

  kthr memory page disk faults cpu

  r b w swap free re mf pi po fr de sr dd s1 — in sy

  cs us sy id

  0 0 0 2820888 809552 94 525 121 69 50 0 26 16 0 0 297 1342

  272 9 4 87

  0 0 0 2824752 778872 2 7 0 0 0 0 0 0 0 0 229 34

  109 0 1 99

  0 0 0 2824752 778872 0 0 0 0 0 0 0 2 0 0 233 28

  116 0 0 100

  0 0 0 2824752 778872 0 0 0 0 0 0 0 0 0 0 228 26

  110 0 0 100

  0 0 0 2824752 778872 0 0 0 0 0 0 0 0 0 0 229 28

  111 0 0 100

  vmstat 工具输出线程/进程信息、内存/交换区使用率、换进/换出页面、磁盘 I/O、页面错误和 CPU 统计信息。

  CPU/ 线程块显示了运行队列 (r) 中的进程/线程、等待 I/O 资源的阻塞进程 (b) 和那些被交换的进程。阻塞进程列中较高的值表示磁盘的速度较慢。交换列中较高的数值表示存在许多进程使用了太多的内存,需要对它们进行换入和换出。交换是一项开销非常高的处理,并且将明显地降低系统的性能。

  内存列显示了当前可用的交换区大小和空闲列表的大小(如果对 RAM 提出请求,可以被交换的页面的数目)。较低的交换值表示即将耗尽交换空间,这并不一定表示存在问题,只要您拥有足够的 RAM 来运行相应的应用程序。较低的空闲列表值可能表示使用了大量的活动 RAM,如果您向该系统中添加更多的进程,那么可能引起交换空间的使用。

  页面列显示了从磁盘交换进来的和交换到磁盘的内存页面。键值列是 pi/po(换进/换出的页面),这表示了对多少页面进行了交换。较高的分页表示缺少 RAM,较高的扫描速率(sr 列)显示了潜在的内存瓶颈。

  使用 top

  top 工具可以提供一种有效的方法来监视活动中的系统和活动的进程、负载以及内存统计信息。有许多不同类型的 top,在缺省情况下,某些系统中安装了其中的一部分,而这些 top 是最新的开放源码版本的工具。它所提供的相关信息更像是 uptime、交换空间和 ps 工具的组合。例如,下面的输出来自于 Solaris 系统中运行的 V3.5.1 版本的 top 工具(请参见清单 7)。

  清单 7. 使用 top

  last pid: 9385; load averages: 7.14, 2.98, 1.21

  61 processes: 55 sleeping, 4 running, 1 zombie, 1 on cpu

  CPU states: 0.0% idle, 93.8% user, 6.2% kernel, 0.0% iowait,

  0.0% swap

  Memory: 1024M real, 712M free, 125M swap in use, 2705M swap free

  PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND

  9313 root 1 22 0 35M 34M run 0:03 8.87% cc1

  9349 root 1 22 0 21M 20M run 0:01 5.47% cc1

  9385 root 1 39 0 4320K 3904K run 0:00 0.38% as

  9384 root 1 29 0 3888K 3424K run 0:00 0.30% as

  9145 root 1 59 0 3736K 2144K cpu 0:00 0.11% top

  9180 root 1 59 0 1808K 1472K sleep 0:00 0.10% make

  486 root 1 59 0 46M 9536K sleep 0:00 0.03% Xsun

  548 root 1 59 0 10M 6360K sleep 0:00 0.03% dtgreet

  553 mc 1 49 0 8288K 1472K sleep 0:01 0.02% sshd

  9345 root 1 49 0 1328K 928K sleep 0:00 0.01% gcc

  9348 root 1 59 0 1328K 928K sleep 0:00 0.01% gcc

  9325 root 1 49 0 1328K 928K sleep 0:00 0.01% gcc

  599 mc 1 59 0 8288K 1488K sleep 0:00 0.00% sshd

  9312 root 1 59 0 1328K 928K sleep 0:00 0.00% gcc

  9 root 16 59 0 9464K 2016K sleep 0:06 0.00%

  svc.configd

  top 工具显示了各个进程的 CPU 使用情况,例如,在前面的示例中,可以看到正在编译大量的文件以及它们使用 CPU 的比例。

  您还应该注意进程的状态:较高的运行进程的数目可能表示系统过于繁忙(将运行进程与 CPU 状态和系统的平均负载进行比较)。Top 本身可能耗费大量的 CPU,所以最好是以较大的更新时间间隔来运行它,以避免监视工作对系统性能带来损害。您可以使用 -s 或 -d 命令行选项(根据您使用的平台来决定)以秒为单位来指定更新的时间间隔。

  使用 SAR

  有些时候,您需要在系统出现问题后对其状态进行监视,但是却又无法实时监视服务器的状态,在这种情况下,您可以使用 SAR(系统活动报告程序)工具。它以指定的时间间隔将相关信息记录到一个全局文件中,然后可以在事后对该文件进行处理以显示计算机的相关信息,该工具正是以这种方式为您提供帮助。

  因为记录信息的进程持续运行于后台,所以它可以用来详细地描述系统在一段时间内的性能,并且可以帮助您确定问题的原因。通常以天、月或您指定的时间间隔为单位来记录相应的信息。日志保存到 /var/log /sa/saDD 或 /usr/adm/sa/saDD,其中 DD 表示一个月中的第几天。启用 SAR 工具与具体的系统有关,并且通常您需要建立一个 cron 任务来自动地运行数据收集脚本 (sa1)。另一个脚本 sa2 可以创建每天的报告,以便您对其进行研究。例如,下面的 crontab 显示了 Solaris 系统中缺省记录的系统性能统计信息:

  0 * * * 0-6 /usr/lib/sa/sa1

  20,40 8-17 * * 1-5 /usr/lib/sa/sa1

  5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A

  在收集到了这些信息之后,可以使用 sar 命令来提取相应的数据。系统所记录下来的信息量可能非常大,并且可以从该数据中选择和提取的详细信息也非常大。然而,通过使用 SAR 的 -A 命令行参数,您可以了解到数据的数量和质量,该选项报告了当前记录的所有信息。

  清单 8. 使用带 -A 参数的 sar 命令生成的输出

  11:49:38 %usr %sys %wio %idle

  13:20:00 1 1 0 99

  13:40:01 19 5 0 76

  14:00:00 0 0 0 100

  14:20:00 0 0 0 100

  14:40:01 0 0 0 100

  15:00:00 0 0 0 100

  15:20:00 0 0 0 100

  Average 3 1 0 96

  11:49:38 device %busy avque r+w/s blks/s avwait avserv

  …

  Average dad1 1 0.3 5 365 47.3 4.5

  dad1,a 0 0.0 0 4 15.4 8.6

  dad1,b 0 0.0 0 0 0.0 13.8

  dad1,c 0 0.0 0 0 0.0 0.0

  dad1,d 1 0.2 3 143 53.0 3.9

  dad1,e 0 0.0 0 39 117.3 5.9

  dad1,h 0 0.0 1 178 29.0 4.6

  nfs1 0 0.0 0 0 0.0 0.0

  nfs2 0 0.0 0 31 0.5 14.5

  sd1 0 0.0 0 0 0.0 3.3

  11:49:38 runq-sz %runocc swpq-sz %swpocc

  13:20:00 2.0 2 0.0 0

  13:40:01 5.3 15 0.0 0

  14:00:00 0.0 0 0.0 0

  14:20:00 0.0 0 0.0 0

  14:40:01 1.5 0 0.0 0

  15:00:00 0.0 0 0.0 0

  15:20:00 0.0 0 0.0 0

  Average 5.0 2 0.0 0

  11:49:38 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s

  13:20:00 0 11 97 0 1 89 0 0

  13:40:01 0 803 100 4 381 99 0 0

  14:00:00 0 0 100 0 0 39 0 0

  14:20:00 0 0 100 0 0 56 0 0

  14:40:01 0 0 100 0 0 61 0 0

  15:00:00 0 0 100 0 0 48 0 0

  15:20:00 0 0 100 0 0 32 0 0

  Average 0 120 100 1 56 99 0 0

  11:49:38 swpin/s bswin/s swpot/s bswot/s pswch/s

  13:20:00 0.00 0.0 0.00 0.0 305

  13:40:01 0.00 0.0 0.00 0.0 223

  14:00:00 0.00 0.0 0.00 0.0 111

  14:20:00 0.00 0.0 0.00 0.0 112

  14:40:01 0.00 0.0 0.00 0.0 112

  15:00:00 0.00 0.0 0.00 0.0 114

  15:20:00 0.00 0.0 0.00 0.0 114

  Average 0.00 0.0 0.00 0.0 152

  11:49:38 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s

  13:20:00 526 39 26 0.64 0.59 38118 25779

  13:40:01 2288 803 320 9.31 6.53 773352 1558934

  14:00:00 22 2 2 0.01 0.01 342 186

  14:20:00 20 2 2 0.00 0.00 150 128

  14:40:01 20 2 2 0.01 0.00 153 128

  15:00:00 26 3 3 0.01 0.02 326 167

  15:20:00 29 3 3 0.02 0.03 641 272

  Average 416 125 52 1.46 1.04 118615 232791

  11:49:38 iget/s namei/s dirbk/s

  13:20:00 2 31 3

  13:40:01 29 385 25

  14:00:00 0 1 0

  14:20:00 0 0 0

  14:40:01 0 0 0

  15:00:00 0 1 0

  15:20:00 0 2 0

  Average 5 61 4

  11:49:38 rawch/s canch/s outch/s rcvin/s xmtin/s mdmin/s

  13:20:00 0 0 39 0 0 0

  13:40:01 1 0 397 0 0 0

  14:00:00 0 0 9 0 0 0

  14:20:00 0 0 0 0 0 0

  14:40:01 0 0 0 0 0 0

  15:00:00 0 0 16 0 0 0

  15:20:00 0 0 38 0 0 0

  Average 0 0 72 0 0 0

  11:49:38 proc-sz ov inod-sz ov file-sz ov lock-sz

  13:20:00 53/16154 0 1732/69661 0 358/358 0 0/0

  13:40:01 54/16154 0 15118/69661 0 358/358 0 0/0

  14:00:00 57/16154 0 15120/69661 0 359/359 0 0/0

  14:20:00 57/16154 0 15120/69661 0 359/359 0 0/0

  14:40:01 57/16154 0 15120/69661 0 359/359 0 0/0

  15:00:00 57/16154 0 15121/69661 0 359/359 0 0/0

  15:20:00 57/16154 0 15127/69661 0 359/359 0 0/0

  11:49:38 msg/s sema/s

  13:20:00 0.00 0.00

  13:40:01 0.00 0.00

  14:00:00 0.00 0.00

  14:20:00 0.00 0.00

  14:40:01 0.00 0.00

  15:00:00 0.00 0.00

  15:20:00 0.00 0.00

  Average 0.00 0.00

  11:49:38 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s

  13:20:00 13.39 3.67 5.05 41.14 77.09 0.00

  13:40:01 188.44 9.91 25.61 373.73 1086.42 0.00

  14:00:00 0.30 0.05 0.06 0.61 1.59 0.00

  14:20:00 0.16 0.00 0.00 0.34 0.76 0.00

  14:40:01 0.20 0.00 0.00 0.48 1.01 0.00

  15:00:00 0.72 0.01 0.01 0.98 2.37 0.00

  15:20:00 0.89 0.02 0.02 1.43 3.47 0.00

  Average 29.66 1.90 4.38 60.43 170.40 0.00

  11:49:38 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf

  13:20:00 0.03 0.06 0.06 0.00 0.00

  13:40:01 6.41 19.18 13.84 0.00 0.00

  14:00:00 0.00 0.00 0.00 0.00 0.00

  14:20:00 0.00 0.00 0.00 0.00 0.00

  14:40:01 0.00 0.00 0.00 0.00 0.00

  15:00:00 0.00 0.00 0.00 0.00 0.00

  15:20:00 0.00 0.00 0.00 0.00 0.00

  Average 0.95 2.83 2.05 0.00 0.00

  11:49:38 freemem freeswap

  13:20:00 109186 5736615

  13:40:01 95816 5614822

  14:00:00 97408 5649849

  14:20:00 97311 5647409

  14:40:01 97418 5653711

  15:00:00 97338 5648982

  15:20:00 97333 5648993

  Average 98516 5654784

  11:49:38 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail

  13:20:00 4178176 3572465 0 38477824 32137880 0 14663680 0

  13:40:01 16572672 10204085 0 99106816 80782488 0 15310848

  0

  14:00:00 16589056 10261693 0 99106816 80797968 0 15343616

  0

  14:20:00 16589056 10259613 0 99106816 80736600 0 15343616

  0

  14:40:01 16589056 10260061 0 99106816 80820088 0 15343616

  0

  15:00:00 16589056 10267477 0 99106816 80902432 0 15343616

  0

  15:20:00 16589056 10274757 0 99106816 80864920 0 15343616

  0

  Average 14813733 9300022 0 90445528 73863192 0 15241801

  0

  在可能的情况下,对上面的输出进行了剪裁,以限制所显示的数据量(比如,并没有显示所有磁盘的统计信息)。有关 SAR 的更详细的信息,请查看参考资料部分和您的系统中的 manual 页面。

  结束语

  尽管在运行迟缓的 UNIX 系统和您能够提取的统计信息之间可能并不存在直接的关联,但在发现系统运行迟缓的时候,第一件事就应该是收集尽可能多的信息。究竟是应该主动地(通过 ps、uptime 和其他工具)还是被动地(通过 SAR 或 top)来完成这项工作,这取决于实际情况。有了这些信息,您应该可以判断 UNIX 系统之所以运行迟缓,到底是因为负载过重(CPU 超负荷使用)、物理内存太少(大量的交换工作),还是存在失控进程(单个进程占用大量的 CPU 时间)的问题。

  在本文中作者以自己浅陋的学识狗胆评价一下游戏中的平衡体系,中华五千年历史文化源远流长,而影响我们中国一代又一代人的DND平衡体系只不过是西方国家30多年的产物,在DND规则已经深入到中国玩家脊髓的情况下,那些一直打着以中华文化为己任的游戏公司所研发的武侠网游就真正的包含中华文化了吗??仁者见仁,智者见智吧。以下全文仅代表笔者的个人意见,希望大家在看的时候尽量抱着一颗平静的心态,也希望各大游戏厂商看过之后(尤其是打着以中华文化为己任的游戏企业)能够有所触动,如若大家认为我所说只是屁话,那么大可一笑了之。

  所有的时针都指向上世纪的70年代,一位名叫加里·吉盖克斯的保险公司推销员发明了世界上第一个商业化的桌上角色扮演游戏“龙与地下城”(简称DND)。经过不断的发展,DND被移植到PC、PS上,而《创世纪》、《巫术》、《魔法门》、《博德之门》等游戏都在DND的规则体系下取得了巨大的成功。时至今日,我们玩的所有网络游戏都已经被深深的烙上了DND的标签,影响中国一代又一代人的游戏平衡体系何时才能够瓦解?请往下看。

  DND是一种随机概率的数学法则也好,是一种虚拟世界的框架也好,但是我从不否认市面上的所有游戏都在采用着此法则,或是以此为基础,一款游戏无论内容多么的丰富,一旦不再按DND来执行,那么游戏的平衡系统将立即崩溃。经验值,数值点数,变动性伤害、角色职业等DND规则框架体系下的要素已洗脑在中国的玩家心中,在人们心里这些东西是组成一款游戏的必然要素。

  在今天中国的网游行业,所有的厂商都打着发扬民族文化的旗号,但是我敢说真正以中华文化为本质做制作出来的游戏没有,现在没有,30年内也不会有。所有的游戏策划人都在讲创意,讲全新的系统模式,讲全新的无等级概念,讲全新的收费体系。但即使他的创意有多么的天马行空,多么的吸引人,但是我想说,这只不过是模仿,在模仿什么,模仿DND的规则,DND的框架体系,在思维模式已被禁锢之后,所有的创意都是可模仿的,可超越的。也正因如此,才造成了中国网游同质化十分严重的市场局面。

  那我们该如何跳出DND这种框架体系下的思维模式呢?也许中国的网游所需要的不是创意,而是要有自己全新的平衡体系,一种独立在DND之外的全新规则。一个在西方只有30多年历史的平衡规则,一种追求哲学的平衡思想已经彻底在游戏的世界中凌驾在了我们五千年的中华文化之上,这何尝不是一个国家,一个民族的悲哀。然而道家的阴阳、儒家的中庸、兵家的赏罚,甚至是法治中的人治与法治,这些5千年的文化所讲述的又何尝不是一种平衡思想呢?这些都将给我们创造新的平衡体系给予思想上的指导。

  游戏中的平衡是各元素的平衡,如何把我们中国的传统文化应用其上,这是个看似不能解决的问题。在的年轻人有多少还在思考学习我们的传统文化,看着那些先秦以前枯燥难懂的文字,又有多少人愿意去学习?更为重要的是,如若将中华文化在游戏中建立一个全新的框架体系,全新的世界观,还需要了解中国的神话体系,而这些又包括“阴阳五行”、“伏羲八卦”,甚至是“天干地支”、“河图洛书”,在这里笔者也只能感叹中华文化太过博大精深。

  也正因为如此,对策划者的要求就变的太过苛刻了。放眼偌大的中国游戏界,有没有一个能够真正掌握天地阴阳并灵活应用五行的人呢,也许有,只不过迷失在了市场的面前。DND的规则框架已十分成熟,也正因如此扼杀了中国游戏创意的真正。所以说创意不值钱,就是因为一个可以被模仿的创意又何称创意。但是在中国传统文化设计下的游戏也许就不具备模仿性,或是模仿难度很高,因为光要研究懂这些传统文化的思想,可能一个人毕生都不够。

  是的,在中国的许多游戏里面也都在讲五行,但他们是怎么做的呢,在游戏中做个很炫的技能然后告诉玩家这个是金木水火土哪个系的,或是干脆拿名著和武侠小说改编成网游,,然后大言不惭的说是自己在发扬中华文化,说自己要借此开拓海外,这一种类似于“阿Q”的精神其实更加的可怕,他们在用另一种方式埋没着中华传统的文化。而如果我们将自己的传统文化创造体系于游戏中去,玩家可能不需要去刻意学习,却又在游戏中能够遵循五行金木水火土的道理,这就像我们生活在这个世界上,我们不需要去了解这个世界的本质,但我们一样可以过的很好。

  其实DND搭建的规则在游戏中只不过是一个静态的游戏世界,而WOW曾试图把动态平衡嵌入到DND体系中去,比如说《魔兽世界》中领土的争夺,其实就是把静态平衡思想变成某种意义上的静态平衡,但暴雪做的并不成功,在没有成熟的思想指导下,即使是暴雪也不可能创造动态平衡,就算是资金、技术等条件都满足了也不行。

  而我们中国的传统文化所讲述的正是一种动态平衡,五行相克,阴阳转化。而如果我们利用中国文化在在游戏中创造一个动态平衡,那么即使西方的静态思想也将会融入到这个平衡框架里面,中华文化讲究包容,也许就是这样吧。如果依靠中华传统的文化思想为本质创作出一个动态平衡体系,那才是中国游戏之所在。

  游戏本身就是世界的另一衍生体,而如何将中华的传统文化和神话体系完美的在游戏世界中架构出一个动态平衡,让玩家们在游戏中能够体会到和现实生活中一模一样的感觉,我们在拥有了成熟思想指导的条件下,怎么样心平气和的去学习、研发才是关键所在。

2010-09-21

  网络驱动程序和其它的驱动程序(比如字符设备和块设备)存在着许多的不同之处。在上面提到过,在linux

  系统下,最大的一个特点就是“一切皆是文件”,它是基于文件而设计的系统。在编写设备驱动程序时,在

  /dev 目录下都有对应的文件,网络接口却很难映射到文件系统,网络驱动程序异步的接收来自外部世界的数

  据包,然后发送给内核,由内核中的网络子系统处理,一直是以《linux 设备驱动程序》第三版, 这本书为

  主来研究的,但是却发现这本书是以 linux内核 2.6.10, 为主编写驱动程序的,且这本书中程序设计的重要

  决策是:不依赖于任何硬件,所以在讲述网络驱动程序时是以 snull 驱动程序为主讲述的,在模块加载到正

  在运行的内核中时(也就是设备注册),它需要请求系统资源,然后对每个监测到的新接口,向全局的网络设备链表中插入一个新的数据结构。

  每一个接口都由一个 struct net_device 结构描述,定义在 中,

  《linux 设备驱动程序》第三版,这本书是以 linux内核 2.6.10 为主的,而我的系统的内核版本是

  2.6.29.4(网上最新的内核版本是 2.6.35.4),在这两者中间的某个版本中,struct net_device 结构的

  内容发生了一些变化,在网络接口上操作的方法 在 struct header_ops 中定义,大家可以在这个结构体

  中发现这些方法,例如open,stop,而以轮询操作接口的方法则定义在 struct napi_struct ,例如 poll

  方法,这些结构体都定义在 这个头文件中。

  今天先对 struct net_device 这个结构的变化记录一下,由于时间关系只能先写到这儿了,还有许多要补

  充的,下次再接可能需要很长一段时间了。

  在大容量,高负荷的web系统中,对数据库进行一系列拆分,可有效提升数据库容量和性能。在初学程序的早期,程序员通常都喜欢按传统数据库设计模式,设计为单库和单一功能表的结构,这样的结构在数据量和并发量达到一定程度之后,会出现严重性能问题和维护问题。在出现问题的时候才着手进行优化,会非常痛苦,所以应该在系统架设之初就考虑好之后会出现的问题。

  目前有些数据库策略是采用单库结构,然后通过同步分发到数台服务器实现读写分离。个人觉得这样的策略非常笨拙,还是想办法将其分隔开来好,否则每台机器的内存都很容易超支。

  一般只对数据量比较大的表进行拆分,这应该没有什么异议;还有一种是有可能会进行维护的比较重要的表,比如文章目录表,如果有从其它系统倒数据进来的可能的话,也要拆掉,不然倒数据时一不小心把目录表弄坏了,发现忘了备份,那真是欲哭无泪。

  下面来分析一下:

  一、时间结构

  如果业务系统对时效性较高,比如新闻发布系统的文章表,可以把数据库设计成时间结构,按时间分有几种结构:

  1) 平板式

  表类似:

  article_200901

  article_200902

  article_200903

  用年来分还是用月可自定,但用日期的话表就太多了,也没这必要。一般建议是按月分就可以。

  这种分法,其难处在于,假设我要列20条数据,结果这三张表里都有2条,那么业务上很有可能要求读三次表。如果时间长了,有几十张表,而每张表是0条,那不就是要读完整个系统的表才行么?另外这个结构,要作分页是比较难实现的。

  主键:在这个系统中,主键是13位带毫秒的时间戳,不要用自动编号,否则难以通过主键定位到表,也可以在查询时带上时间,但比较烦琐。

  2) 归档式

  表类似:

  article_old

  article_new

  为了解决平板式的缺点,可以采用时间归档式设计,可以看到这个系统只有两张表。一张是旧文章表,一张是新文章表,新文章表放2个月的信息,每天定期把2个月中的最早一天的文章归入旧表中。这样一方面可以解决性能问题,因为一般新闻发布系统读取的都是新的内容,旧的内容读取少;第二可以委婉地解决功能问题,比如平板式所说的问题,在归档式中最多也只需要读2张表就完成了。

  归档式的缺点在于旧表容量还是相对比较大,如果业务允许,可对旧表中的超旧内容进行再归档或直接清理掉。

  二、版块结构

  如果按照文章的所属版块进行拆表,比如新闻、体育版块拆表,一方面可以使每个表数据量分离,另一方面是各版块之间相互影响可降到最低。假如新闻版块的数据表损坏或需要维护,并不会影响到体育版块的正常工作,从而降低了风险。版块结构同时常用于bbs这样的系统。

  板块结构也有几种分法:

  1) 对应式

  对于版块数量不多,而且较为固定的形式,就直接对应就好。比如新闻版块,可以分出新闻的目录表,新闻的文章表等。

  news_category

  news_article

  sports_category

  sports_article

  可看到每一个版块都对应着一组相同的表结构,好处就是一目了然。在功能上,因为版块之间还是有一些隔阂,所以需要联合查询的需求不多,开发上比时间结构的方式要轻松。

  主键:依旧要考虑的,在这个系统中,主键是版块+时间戳,单纯的时间戳或自动编号也能用,查询时要记得带上版块用于定位表。

  2) 冷热式

  对应式的缺点是,如果版块数量很大而且不确定,那要分出的表数量就太多了。举个例子:百度贴吧,如果按一个词条一个表设计,那得有多少张表呢?

  用这样的方式吧。

  tieba_汽车

  tieba_飞机

  tieba_火箭

  tieba__unite

  这个表汽车、火箭表是属于热门表,定义为新建的版块放在unite表里面,待到其超过一万张主贴的时候才开对应表结构。因为在贴吧这种系统中,冷门版块肯定比热门版块多得多,这些冷门版块通常只有几张帖子,为它们开表也太浪费了;同时热门版块数量和访问量等,又比冷门版块多得多,非常有特点。

  unite表还可以扩展成哈希表,利用词条的md5编码,可以分成n张表,我算了一下,md5前一位可分36张表,两位即是1296张表,足够了。

  tieba_unite_ab

  tieba_unite_ac

  …

  三、哈希结构

  哈希结构通常用于博客之类的基于用户的场合,在博客这样的系统里有几个特点,1是用户数量非常多,2是每个用户发的文章数量都较少,3是用户发文章不定期,4是每个用户发得不多,但总量仍非常之大。基于这些特点,用以上所说的任何一种分表方式都不合适,一没有固定的时效不宜用时间拆,二用户很多,而且还偏偏都是冷门,所以也不宜用版块(用户)拆。

  哈希结构在上面有所提及,既然按每个用户不好直接拆,那就把一群用户归进一个表好了。

  blog_aa

  blog_ab

  blog_ac

  …

  如上所说,md5取前两位哈希可以达到1296张表,如果觉得不够,那就再加一位,总数可达46656张表,还不够?

  表的数量太多,要创建这些表也是挺麻烦的,可以考虑在程序里往数据库insert之前,多执行一句判断表存在与否并创建表的语句,很实用,消耗也并不很大。

  主键:依旧要考虑的,在这个系统中,主键是用户ID+时间戳,单纯的时间戳或自动编号也能用,但查询时要记得带上用户名用于定位表。

  四、总分结构

  以上的这些结构,根据每个业务系统,能想出的估计还有很多。不过现在互联网业务越来越复杂了,有些时候,单一的拆分法还不能实现需求,需要几种拆分方案一起实施,多管齐下,这时候其中的逻辑会让人绕晕。我就开发过一个系统,仅仅是将哈希结构和时间结构混着一用,觉得逻辑就相当复杂。

  所以,除了拆表之外,按最原始的单库单表,再建一个总表,是非常有利的架构。在这个架构中,每次往数据库会写入两倍数据,读取主要依赖拆表提升性能,总表用于实现拆表后难以实现的功能并且用于每天的定时备份;另外总表和分表还相互是一个完整的备份,任何一个分表损坏或数据不正常,都可以从总表中读到正确的数据并恢复,反之亦然。

  在总分结构中,让人感到质疑的是总表的性能和可维护性。我的方案是总表可采用相对能保证稳定的一些服务软件和架构,例如oracle,或lvs+ pgpool+PostgreSQL,重点保证数据稳定;相对的,分表就用轻量级的mysql,重点在于速度。能够对总分表各采用不同的软件和方案,也是总分结构的一大特点。

  总结:如何通过拆表来优化系统,最基本的是要按业务需求和特点分析。本文仅仅是提供了几种基本方法,具体工作要先动脑好好想,千万不可乱套,用错了工作量要加十倍噢。