存档

文章标签 ‘linux’

Linux System and Performance Monitoring

2014年4月6日 1 条评论

写在前面:本文是对OSCon09的《Linux System and Performance Monitoring》一文的学习笔记,主要内容是总结了其中的要点,以及加上了笔者自己的一些理解。通过总结,一方面是为了加深笔者自己的理解,另一方面也是希望能对有需要的朋友有所帮助。

做为一名服务器开发工程师,经常会有分析系统性能,解决系统性能瓶颈的需求。通常我们所说的性能问题,不外乎就是CPU/Memory/IO/Network这四个方面,这四个方面每个都有各自独特之处,同时也都是相互关联的。下面就分别从这四个方面展开进行介绍。

CPU

基本概念

1. 内核调度的优先级:在Linux系统中,内核scheduler调度资源包括两种:threads(Process是由threads组成)和interrupt,这些被调度的资源是有特定的优先级的,以下从高到底:

  • Interrupts: Interrupt被设备用来通知内核相关的事件,优先级是最高的
  • Kernel(System) Processes:所有的系统进程都是以仅次于Interrupt的优先级被调度的
  • User Processes: 所有的应用程序都是run在用户态空间,以最低的优先级被内核调度
  • 阅读全文…

让你的Linux终端色彩斑斓!

2012年3月4日 没有评论

做为一名linux后台开发工程师,每天面对着只有黑白两色的linux终端,你是否曾想过,让你的终端也能五彩斑斓起来,让每天的开发生活不再只是黑白那么的单调。只要你能想到,就一定会有实现的办法。接下来,我将一步步为你接开Linux终端显示彩色的神秘面纱。
1. 先照下面的例子,在你的终端操作,来一个直观的印象。

相信细心的朋友通过对比上面的例子,应该能看出上面的例子的一些特点,我在这里就不卖关子了,基本的格式是:

1
echo "< ctrl-v >< escape >[xxmHello world< ctrl-v >< escape >[yym"

其中,xx和yy分别是各种颜色的代码,通过它们可以来控制要显示的色彩的种类。在色彩码前面有三个特殊的字符,一个是< ctrl-v >,一个是< escape >,一个是[,这些都是必须的。 阅读全文…

分类: 技术杂记 标签: , ,

linux程序分析工具介绍(三)——sar

2011年7月10日 2 条评论

本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具。我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO)。我们的应用程序在操作系统中运行前,我们需要了解系统当前的内存,cpu和IO的使用状况,还需要明白我们的应用程序运行时自身所需要的内存,cpu和IO资源的情况。只有操作系统剩余的内存,cpu和IO资源能够满足应用程序所需要的,才能保证应用程序在操作系统中正常的运行。sar就是用来帮助我们了解操作系统当前内存,cpu和IO等资源的使用情况的一个非常方便的工具,下面通过具体的例子来介绍sar的使用。
在介绍例子之前,首先需要说一下sar命令的基本用法:sar [option] [interval] [count]

  • 1. 通过sar获取系统内存使用相关信息
  • (1)内存使用情况统计:-r,通过这个选项,我们可以了解当前系统中内存的使用情况 阅读全文…

    linux程序分析工具介绍(二)—-ldd,nm

    2011年3月19日 2 条评论

    本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具。ldd是用来分析程序运行时需要依赖的动态库的工具;nm是用来查看指定程序中的符号表相关内容的工具。下面通过例子,分别来介绍一下这两个工具:

    1. ldd, 先看下面的例子, 用ldd查看cs程序所依赖的动态库:

    wuzesheng@wuzesheng-ubuntu:~/Public$ ldd cs
    	linux-gate.so.1 =>  (0xffffe000)
    	libz.so.1 => /lib/libz.so.1 (0xb7f8c000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0xb7f75000)
    	libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0xb7e4d000)
    	libpcre.so.0 => /usr/lib/libpcre.so.0 (0xb7e21000)
    	libstdc++.so.6 => /usr/local/gcc4.5.1/lib/libstdc++.so.6 (0xb7d40000)
    	libm.so.6 => /lib/libm.so.6 (0xb7d18000)
    	libgcc_s.so.1 => /usr/local/gcc4.5.1/lib/libgcc_s.so.1 (0xb7cfd000)
    	libc.so.6 => /lib/libc.so.6 (0xb7bbc000)
    	/lib/ld-linux.so.2 (0xb7fab000)
    	libdl.so.2 => /lib/libdl.so.2 (0xb7bb7000)

    阅读全文…

    linux程序分析工具介绍(一)—-“/proc”

    2011年1月4日 7 条评论

    写在最前面:在开始本文之前,笔者认为先有必要介绍一下linux下的man,如果读者手头用linux系统,直接在终端输入man man便可以看到详细的说明,我在这里简单的总结一下,man命令是用来查看linux下各种命令、工具等的用户手册(manual)的。一种比较常用的用法是”man n field”,这里的n是要查找的手册了类型,field是关键字。在这里介绍一下n:

  • 0 /usr/include下的头文件
  • 1 可执行程序和shell命令
  • 2 系统调用
  • 3 系统库函数
  • 4 /dev下的特殊文件
  • 5 文件格式和约定(比如/etc/passwd)
  • 阅读全文…

    分类: 技术杂记 标签: , , , , ,

    谈”句柄泄漏”

    2009年8月5日 没有评论

    “泄漏”是我们写程序的人老生常谈的一个话题。最为常见的就是内存泄漏(memory leak),本文介绍一种新的泄漏—句柄泄漏(handle leak)。在windows系统的程序中,我们经常会遇到句柄这个词,而且windows也抽象出了一种句柄类型HANDLE。在unix系统的系统中,句柄这个词用的不是很多。我们用另一个词描述它—文件描述符(file descriptior)。这里的文件是指广义的文件,因为在unix系统中,everything is a file。总的说来,句柄是指操作系统给我们的应用程序的进程分配的,用来标识某种资源的符号。这里的资源,可以是狭义的文件,可以是socket连接,也可以是一个对象。 阅读全文…