科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道路由交换十八个“盗梦图腾”助你摆脱运维“梦魇”

十八个“盗梦图腾”助你摆脱运维“梦魇”

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

利用中秋小假,我观看了最近备受热议的电影《盗梦空间》。影片中的盗梦团队筑造的梦中梦体现了复杂逻辑的魅力。该电影所引发的热议甚至比起电影本身更精彩。虽然现实中人不需要防御“盗梦者”,但是计算机系统却是随处可遇“盗梦者”,那么作为系统管理员究竟该如何抵御这些“盗梦者”呢?

来源:中国IT实验室 2010年11月13日

关键字: 网络管理 网络技术

  • 评论
  • 分享微博
  • 分享邮件

  利用中秋小假,我观看了最近备受热议的电影《盗梦空间》。影片中的盗梦团队筑造的梦中梦体现了复杂逻辑的魅力。该电影所引发的热议甚至比起电影本身更精彩。虽然现实中人不需要防御“盗梦者”,但是计算机系统却是随处可遇“盗梦者”,那么作为系统管理员究竟该如何抵御这些“盗梦者”呢?

  首先允许我先介绍下《盗梦空间》这部电影的主要内容:《盗梦空间》是由《黑暗骑士》导演克里斯托夫·诺兰执导,莱昂纳多主演的一部具有很强逻辑思维和数学理论为基垫的电影。主要讲男主角科布(莱昂纳多饰)领导的盗梦团队筑造了一个梦中梦(共有4层梦境),目的是将一个思想注入能源大亨继承人费舍尔(希里安·墨菲饰演)的头脑中,让其放弃继承庞大的遗产。

  ▲电影《盗梦空间》宣传海报

  有资深影迷评论称,影片中的多重梦境实际上是利用程序算法中的递归思维。假设做梦是一个函数Dream(),那么梦中梦就是该函数的递归调用。比起一般的递归调用来,该程序的特殊之处是,它是一个多线程的递归调用,也即是说每一次递归都会新建一个线程来执行函数体。因此该递归函数有两种结束机制,一种是wait超时(药物失效),另一种是由其调用函数来结束(kick)。这就好比影片中,当需要进入下一层梦境,就必须注入药物,当需要返回上一层梦境,就必须以自杀形式结束。

  而由于硬件平台所限,该递归只能进行四层,因为每次递归都需要消耗系统资源,所以递归深一层,系统运行就越慢(梦境每深一层,时间就变慢20倍)。一旦在第四层的时候资源耗尽(做梦者生命耗尽),就会产生栈溢出,因此线程就会进入僵死状态(limbo状态)。而一旦将运行超时时间设置得过长(强力镇静药物),则会导致子线程运行过长从而耗尽资源。此时如果子线程还没有被上层调用函数强制结束(撞击),则会被detach(在梦中死去),因此进入僵死状态(进入limbo状态)。而为什么多层次的梦唤醒需要同步撞击呢,这就跟我们析构一个含有指针的STL容器一样,如果不遵守顺序,那么就会出现容器被析构而指针内容还在从而发生内存泄露的问题。

  总的来说整个电影的梦中梦的营造就是利用多重递归的三个操作:入栈(pushing),弹出(popping)、堆栈(stacks)。其中“入栈”就是暂停手头工作、标记停止地点、开始另一项工作,新工作比原工作要“低一个层次”。“弹出”就是结束低层次的工作、在上一层次暂停的地方恢复原工作。“堆栈”用来记录暂停地点的环境信息。例如接电话过程中有新电话进来,于是暂停第一个电话开始接第二个电话,不一会又暂停第二个电话来接第三个电话……堆栈可以记录你结束当前电话后该回到第几个电话、该电话是谁打来的、暂停时你们谈到哪儿了。人们很容易在多重嵌套中迷失,这时候堆栈的作用就很重要。只要堆栈记录准确,我们就不会搞混各种层次。

  显然,《盗梦空间》中多重嵌套的梦就是“递归”,入梦机器负责“推入”,穿越操作用来“弹出”,每层梦中留守的人就是“堆栈”,负责维持现场环境以确保成功穿越。

  作为一个盗梦团队,盗梦的目的其实跟计算机安全中的缓冲区溢出攻击是同理的,也就是利用程序漏洞(人的性格弱点),向其地址空间对应于人的头脑)植入可执行代码(想法),从而可以在对方的系统(大脑)中执行自己的特权指令(解散Fisher的公司)。

  盗梦巧妙的应用了程序设计思想,同时也证明了再完善的系统也是存在漏洞的的,只有全面了解你的系统才能做好充足的安全防御工作,而系统监控就是安全防御的第一步,接下来就向大家介绍10款优秀的监控工具、以及常用内存监控和系统性能监控工具。

  为确保公司的服务器稳定的运转,只是抱着“服务器不要出故障”的希望是没用的,我们需要时刻了解服务器的状况。

  一位国外的技术博主在博客上介绍了他认为不错的十个服务器监控工具。这一些列工具可以监控到服务器方方面面的信息,从运行时间、性能到安全,甚至到服务器所处的物理环境指数。基本上通过这些工具,你可以了解到服务器可能会出现什么问题,并在问题出现之前解决它们。

  1. Pingdom

  ▲

  Pingdom可以监测运行时间和整体性能,并生成便于阅读的表格和图表。Pingdom提供iPhone应用版本,如果没有iPhone,则可以使用email和短信警告的功能。

  2. Dotcom-Monitor

  ▲

  Dotcom-Monitor是一个增强的网站监控服务,这个服务可以延长你的服务器运行时间。这个服务提供实时的以及email的报告和图表,并可以指定将警告发给哪些特定的负责人。Dotcom-Monitor支持多用户、多权限的功能。

  3. McAfee Secure

  ▲

  McAfee Secure监测服务器的潜在安全漏洞,防止网站的访问者遭遇身份泄露、恶意软件、垃圾邮件、病毒等不良事物。McAfee Secure将会每天检查你的网站。

  4. Webmetrics GlobalWatch

  ▲

  GlobalWatch监测网站、互联网应用和服务的情况,包括宕机时间、服务器错误、性能低下的原因等问题的识别与分析,并提供性能测量的详细报告以及灵活的警告功能。这个强大的工具支持Web 2.0,AJAX以及Flash和Java等嵌入式应用,并可以真实向你反应美国、亚洲、非洲和欧洲等地区的用户访问你网站的情况。

  5. Nimsoft Monitoring Solutions(NMS)

  ▲

  NMS监控服务器以及之上配置的应用。从CPU到内存、事件日志、打印任务和队列等全部核心资源都被详细的监控。NMS的安装很快捷,程序本身是轻量级的(你可以只安装你需要的组件),而且有良好的伸缩性(你可以同时监控上百乃至上千的服务器)。NMS控制台的界面也相当简洁明了。

  6. Solarwinds Orion Network Performance Monitor(NPM)

  ▲

  Orion NPM可以确保你的每台服务器都以100%的效率运行,同时监控网络上所有的路由器、交换机以及无线连接点的情况。这个软件安装便捷,而上百技术支持人员都是专业的网络工程师。使用起来相当的傻瓜式。

  7. Nagios

  ▲

  Nagios是一个完备的IT基础设施监控系统,它可以为整个操作网络进行快照,同时监控所有应用、服务、操作系统、网络协议和系统的健康状况。一旦出现问题,你的IT员工将通过email和短信接到即时警告,而出错的服务器、应用和设备会自动重启。Nagios适合几乎所有内置的以及第三方应用。

  8. ENVIROMUX Server Environment Monitoring System

  ▲

  这是个强大的工具,极其适合在数据中心、Web托管设施、电信交换站点以及服务器机房等场所使用。这个工具可以检测温度,湿度,液体泄露,震动等物理参数。你可以将这个系统和摄像头集成,从而从世界各地监控到场所的情况。

  9. Jacarta interSeptor Pro

  ▲

  Jacarta interSeptor Pro记录服务器周围的温度和湿度的情况并制作图表。软件在周围环境需要调整的时候发出email或短信提示。有三种模式可以选择:8口,16口以及24口的。添加更多的感应器可以监控液体泄露、烟尘和断电等情况。

  10. Simple Server Monitor

  ▲

  imple Server Monitor是一个低预算的监控服务,不过功能相当齐全,包括精确到分钟的运行时间监控,以及性能图表。提醒渠道包括弹出消息窗口,桌面提醒,电子邮件和短信等方式。

  电影中盗梦的目的跟计算机安全中的缓冲区溢出攻击是同理的,也就是利用程序漏洞(人的性格弱点),所以系统内存的使用情况对于系统而言是相当重要的。而作为系统管理员懂得如何查看内存使用情况是非常重要的。

  Windows系统中查看内存的使用情况很简单,这里就不再重复了。重点要介绍的是在Linux系统下查看内存使用情况的free命令:

  下面是对这些数值的解释:

  total:总计物理内存的大小。

  used:已使用多大。

  free:可用有多少。

  Shared:多个进程共享的内存总额。

  Buffers/cached:磁盘缓存的大小。

  第三行(-/+ buffers/cached):

  used:已使用多大。

  free:可用有多少。

  第四行就不多解释了。

  区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

  第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

  所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

  如上例:

  2795064=16176+110652+2668236

  接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。

  如何看额定值:

  用free -m查看的结果:

  查看/proc/kcore文件的大小(内存镜像):

  备注:占用内存的测量

  测量一个进程占用了多少内存,Linux系统为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

  输出解释:

  CPU 每行的每个参数意思(以第一行为例)为:

  参数 解释 /proc//status

  Size (pages) 任务虚拟地址空间的大小 VmSize/4

  Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4

  Shared(pages) 共享页数 0

  Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4

  Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4

  Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4

  dt(pages) 04

  查看机器可用内存:

  我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在Linux系统中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

  所以 空闲内存=free+buffers+cached=total-used

  服务器系统性能的监测可以定期有效地查看系统的运行状况。Linux系统下,大多数的性能监测工具保存在/proc目录下。这里我们将Linux AS 和 SUSE LINUX EnterpriseServer中的命令行及图形方式下的性能监测工具做概括性介绍。

  1、uptime

  uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。

  uptime的输出包含一项内容是load average,显示了最近15分钟的负荷情况。它的值代表等待CPU处理的进程数,如果CPU没有时间处理这些进程,load average值会升高;反之则会降低。

  load average的最佳值是1,说明每个进程都可以马上处理并且没有CPU cycles被丢失。对于单CPU的机器,1或者2是可以接受的值;对于多路CPU的机器,load average值可能在8到10之间。

  也可以使用uptime命令来判断网络性能。例如,某个网络应用性能很低,通过运行uptime查看服务器的负荷是否很高,如果不是,那么问题应该是网络方面造成的。

  下边是uptime的输出样式:

  ▲

  2、dmesg

  dmesg命令主要用来显示内核信息。使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题。

  另外,使用dmesg可以确定您的服务器安装了那些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。执行/bin/dmesg命令可以查看该记录。

  下边是dmesg的输出样式:

  ▲

  3、top

  top命令显示处理器的活动状况。缺省情况下,显示占用CPU最多的任务,并且每隔5秒钟做一次刷新。执行该命令后会显示:Process priority and nice levels

  Process priority的数值决定了CPU处理进程的顺序。LIUNX内核会根据需要调整该数值的大小。nicevalue局限于priority。priority的值不能低于nice value(nicevalue值越低,优先级越高)。您不可以直接修改Process priority的值,但是可以通过调整nicelevel值来间接地改变Process priority值,然而这一方法并不是所有时候都可用。如果某个进程运行异常的慢,可以通过降低nicelevel为该进程分配更多的CPU。

  Linux 支持的 nice levels 由19 (优先级低)到-20 (优先级高),缺省值为0。执行/bin/ps命令可以查看到当前进程的情况。

  4、iostat

  iostat由Red Hat Enterprise Linux AS发布。同时iostat也是Sysstat的一部分,可以下载到,网址是http://perso.wanadoo.fr/sebastien.godard/

  执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime。除此之外,iostat还对创建一个服务器磁盘子系统的活动报告。该报告包含两部分:CPU使用情况和磁盘使用情况。

  下边是iostat的输出样式:

  ▲

  5、vmstat

  vmstat提供了processes, memory, paging, block I/O, traps和CPU的活动状况.

  以下是vmstat的输出样式:

  ▲

  Process:– r: 等待runtime的进程数– b: 在不可打断的休眠状态下的进程数

  Memory:– swpd: 虚拟内存使用量(KB),– free: 闲置内存使用量(KB),– buff: 被当做buffer使用的内存量(KB)

  Swap:– si: swap到磁盘的内存量(KBps),– so: 从磁盘swap出去的内存量(KBps)

  6 、sar

  sar是Red Hat Enterprise Linux AS发行的一个工具,同时也是Sysstat工具集的命令之一,sar用于收集、报告或者保存系统活动信息。sar由三个应用组成:sar显示数据、sar1和sar2用于收集和保存数据。

  使用sar1和sar2,系统能够配置成自动抓取信息和日志,以备分析使用。配置举例:在/etc/crontab中添加如下几行内容:

  ▲

  7 、Traffic-vis

  Traffic-vis是一套测定哪些主机在IP网进行通信、通信的目标主机以及传输的数据量。并输出纯文本、HTML或者GIF格式的报告。

  注:Traffic-vis仅仅适用于SUSE LINUX ENTERPRISE SERVER。

  8 、pmap

  pmap可以报告某个或多个进程的内存使用情况。使用pmap判断主机中哪个进程因占用过多内存导致内存瓶颈。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章