• 创建:2006-6-9
  • 文章:392
  • 评论:631
  • 访问:1359960
  •  
关键字:sap

Work Processes
[39412] How many work processes to configure
[21960] Several instances/systems on one UNIX computer
[9942] Max. number of work processes is 40 due to events 
[33873] What do the semaphores mean? 


 

Memory Management
[37537] Performance increase by shared memory pools.
[78498] High paging rate on AIX servers, in part. database servers .
[95454] A lot of extended memory on AIX (32-bit)
[88416] Zero administration memory management from 4.0A/NT 
[110172] NT: Transactions with large storage requirements 
[33576] Memory Management (as of Release 3.0C, Unix and NT) 
[103747] Performance: Parameter recommendations for Rel. 4.0 and high 
[386605] SAP memory management for Linux 
[649327] Analysis of memory consumption
[548845] Internal sessions over 2GB


[425207] SAP memory management, current parameter ranges


 

Buffering
[504875] Buffering number ranges 
[678501] System stoppage, locks on table NRIV
[572905] Unbuffered number ranges 

 

 


  

 

 
编辑 | 阅读全文(317) | 回复(4),古老虾 发表于 2007-12-24 21:45
关键字:SAP IBM AIX HACMP

已经很久没有写技术性文章了,因最近SAP应用性能不是很好,不太稳定,也就静下心来,专题研究了一些AIX UNIX平台。

1、关于学习

由于有书、有网、有机器、有实践,所以觉得学的很快,也就1个多月,就觉得可以了,于是自己单练,这是才发现原来有许多东西不知道,命令不熟,概念不清。于是再学,再练。这个阶段就漫长了,因为不知道学什么,网上能找到的资料也都是很肤浅的,自己会的东西到处都有,想找的什么也找不到。另外,在这时,经常发现书上写的,或别人说的与现实情况不相符合。困惑。特别是发生过一些稀奇古怪的事情,莫名其妙的问题,莫名其妙地好。大概一些老工程师都说过,运气很重要。当你也学的差不多的时候,想一想学它有什么用,许多技术我不会,但只要具有需要的时候可以在三天之内掌握,一周精通就行了。经力有限,特别对于一些初浅的东西,学多了太浪费。
2、关于AIX 管理
aix无非几件事情:
逻辑卷管理、备份和恢复管理(略带数据库和应用方面)
memory管理
CPC processor调度
tcpip
interface管理(各种稀奇古怪的接口,scsi,fc,network,tty,。。)
用户管理
HACMP群集管理(高可用和高性能计算)

在学习之前,建议从两方面入手:
其一为理论基础,所有的计算机系统]都差不多,无论hp/sun/alpha,甚至windows,你要想如果让你去实现这件事情,你会怎样设计这个操作系统。心中始终有一个架构模型在那里。每一个组件之间都是有一定关系的。另一个是命令和参数以及输出解释,这是个熟练的问题,利用命令实现你的要求。牢记这两点,学aix的时候,往这两方面学,往上靠。

3、AIX平台的SAP应用需要调整参数。几个小参数可以导致系统性能质的提升。详细情况参照前面谢过的博文。

编辑 | 阅读全文(862) | 回复(1),古老虾 发表于 2007-6-8 16:49

2007-5-3 15:31 | [转帖]Aix 内存管理

关键字:ERP SAP AIX

ERP系统其基础平台UNIX的内存管理是系统优化的一大主题,接着项目上线,把有关内存的知识做了解。

1、aix内存分为那些部分:a、persistent(长久型)和work(工作型),persistent型是指读入到内存的东西本身在文件系统是存在的,例如file中的data,可执行文件,work型是指process中的stack,变量,shared的那些东西,是process中途产生的。persistent当page out的时候回写到文件系统中,work当page out的时候回写到pagespace中。b、computational(计算型)和file(文件型)。computational型可以理解为读入可执行文件的地方,file型可以理解为读入文件中的data部分。这种划分是在repage中统计使用,发生一次pagefault是正常机制,但应该避免发生多次的page fault,aix在这里是做了一种统计,分别统计两种上述两种类型内存发生repage的count,我们可以用vmtune去调整这两种内存的page的机制(vmtune -p -P),默认的设置总是把大量的内存缓存了file型的内存,假如是跑Oracle数据库,而造成oracle数据库的进程使用的computational内存(可以理解为shared pool)而不得发生很多page out和page in;默认的设置在fielsystem一级用大量的内存缓存了file型的内存,而在oracle的进程的file型内存或是persistent内存部分(可以理解为sga)也缓存了同样的东西,事实上造成了重复。
2、vmm的一些理解。虚拟内存管理,process产生的时候被分配到persistent的内存和work的内存,这些内存指向内存中的region,而region是可以在多个process中引用的,这也是虚拟的其中的一个含义吧,个人认为。region再在内核的vmm中指向实际的real memory page table。pagespace的引入也是虚拟的内存的另一个含义吧,把work型内存page out到pagespace当中。对于大内存的系统正常的情况下pagespace是应该用的很少的,因为pagespace只是work型内存page out的地方,persistent型内存page out到本身的文件的磁碟上。但为什么有时候明明很大的内存,而又使用了很多pagespace呢,理由就是我开始说的大量的real memory缓存file型内存去了,而真正的应用要用到实际内存时候而不得要频繁发生page out。
3、pagespace换页发生的机制,或者说是原因:个人理解是两种,a、其他process需要内存了,而freelist不够,所以要依据一定的算法去page out那些用不到的内存了。b、a种的情况比较理想,但实际运用中依据一定的算法也很难判断出那些内存要page out出去,这个时候aix依据自己对computational型内存和file型内存的repage的count的统计分析,确定了一个pageout的算法,从而也可以确定那些内存page out出去,这也就可以理解为什么很大的实际内存也要发生page out的现象的。

编辑 | 阅读全文(1509) | 回复(1),古老虾 发表于 2007-5-3 15:31

使用AIX并行I/O(Concurrent I/O)来提高数据库的性能(含网络资料及实际调整案例)

SAP应用对系统的资源要求较高,如系统的CPU,内存和硬盘,本文介绍如何在AIX操作系统下合理的配置内存参数,使得SAP应用达到最好的性能。

在AIX中缺省的系统内存参数设置,并不适合SAP应用的需求,因此需要进行一些调整。
AIX操作系统中,一般将内存的使用分成两个部分,一个部分用于应用程序运行使用,称为计算内存(Computational),另一部分用于文件缓存,称为文件缓存(Non-Comp),AIX操作系统通过 minperm%,maxperm%, maxclient%, strict_maxclient, lru_file_repage,minfree, maxfree, 等参数控制系统的内存使用.

在SAP应用环境下建议将以上参数设置为:
vmo -p -o strict_maxclient=0
vmo -p -o lru_file_repage=0

vmo -p -o minperm%=3
vmo -p -o maxclient%=8
vmo -p -o maxperm%=8

vmo -p -o minfree=[CPU数量]*120
vmo -p -o maxfree=[CPU数量]*128

如果CPU数量是12,则minfree=1440, maxfree=1536


使用AIX 并行I/O (Concurrent I/O) 来提高数据库的性能


内容提要:


AIX 5L v5.2.0.10( 或称作AIX 5L v5.2 ML01) 在增强的日志文件系统(JFS2) 上引入了并行I/O (Concurrent I/O) 的新的功能。在许多应用环境下,这一新的功能可提高文件系统访问的性能,尤其对于关系型数据库的应用。在JFS2 的文件系统上采用并行I/O (Concurrent I/O) 技术后,可以得到与采用裸设备相似的性能。本文将对并行I/O (Concurrent I/O) 做一个简要的介绍并给出在Oracle 9i 数据库上进行性能比较的结果。


说明:

    1. 简介

    文件系统长久以来一直是UNIX 存储管理的核心,UNIX 的用户通过系统命令和系统接口对存储在文件系统上的数据进行操作和管理。文件系统的使用提供了对数据进行存储的有效手段。

    如同使用其它方式一样,文件系统的使用是对于性能与易用性平衡的结果。在应用和磁盘之间传输数据最快的方式是直接进行访问,如使用裸设备。而使用文件系统来存数数据会产生很多额外开销,如串行访问,缓存和数据拷贝。这些都将对性能产生影响。使用裸设备进行数据的存储虽然能减少这些额外开销,但对用户的技术水平要求较高,而且不同应用程序对裸设备的使用方式也不同,需要对用户进行额外的培训。但由于对裸设备进行访问的高性能,传统上来说,数据库的应用程序更希望使用裸设备而不是文件系统。

    JFS2 文件系统上采用并行I/O (Concurrent I/O) 技术后,数据库用应用可以得到与采用裸设备相似的性能。

    2. 数据库应用

    对于数据库应用来说,之所以采用裸设备比采用文件系统具有更好的I/O 性能,主要是由于文件系统的一些特性:
    l 文件缓存
    l 文件写保护锁或inode
    l 系统的sync 进程
    这些文件系统的特性可以帮助保护数据的一致性,提高容错能力,事实上在许多情况下提高系统的性能。然而这些特性却经常对于数据库的应用的性能产生负面的影响。本文将解释文件系统中这些特性的作用,并介绍在JFS2 上的新功能如何消除它们对性能的影响。

    2.1 文件缓存

    从最基本的层面来说,文件就是在介质上所存储一些二进制位的集合,当一个进程需要从某个文件访问数据的时候,操作系统将这些数据读入内存,然后此进程可以对数据进行操作,最后将处理完的数据写入磁盘。操作系统能够从磁盘上直接读出或写入数据,但是由于磁盘较慢的访问速度,这些操作的响应速度和吞吐率都较差。因此操作系统试图通过文件缓存的技术,即在内存中缓存数据的方法,来减少对磁盘的访问频率。当进程需要从文件中读取数据的时候,操作系统首先试图从文件缓存中读取所需要的数据,如果这些数据不在文件缓存中,那么从磁盘上文件系统的文件中读取,同时将这些数据缓存在文件缓存中。如图1 和图2 所示:

    1 读操作- 数据在文件缓存中(命中)


    2 读操作- 数据不在文件缓存中(没有命中)

    与读数据相似,当写数据时数据写入文件缓存,因此将来需要再读取这些数据时,不需要访问磁盘,同时也降低了写磁盘的频率。当缓存的命中率高时,使用文件缓存将是非常有效的。并且可以采用预先读取和延迟写的技术来减少磁盘访问的频率。文件缓存所带来的另一个好处是,以异步的方式进行写操作,这使得应用可以继续运行,而不用等待数据写入磁盘操作的完成,如图3 所示。

    虽然文件缓存提高了I/O 的性能,但是它消耗了大量的系统内存。AIX JFS2 文件系统允许系统管理员控制可以作为文件缓存的最大内存数。这种控制通过maxclient% 参数控制。系统管理员可以使用vmo 命令来调整maxclient% 参数。maxclient% 的却省值是80 ,其含义是80%
    的物理内存能够作为文件缓存。maxclient% 参数的取值可在1100 之间变动。如可以采用以下命令设置最多50% 的系统物理内存能够作为文件缓存:vmo –o maxclient%=50

    3 写操作

    于此相对应,裸设备不使用系统内存来缓存应用的数据,所以没有以上图示的操作。

    2.1.1 直接存取(Direct I/O

    一些应用程序并不能从文件缓存中得到好处,如有些进行大量科学运算的程序,从不访问以前访问过的数据,而且由于他们对数据进行顺序访问,这使得文件缓存的命中率非常低。数据库的应用通常在应用层上有自己的数据缓存技术,所以不需要操作系统进行文件缓存。在这种情况下,使用文件缓存会产生很多额外开销,因为数据首先从磁盘被读入系统的文件缓存,然后从文件缓存拷贝到应用的缓存中,这被称为“重复拷贝”(double-copying ),重复拷贝增加了额外的CPU 开销,并且相同的数据同时在文件缓存和应用的缓存中,增加了内存的消耗。

    JFS2 的直接存取(Direct I/O )技术可以使应用程序的数据被系统的文件缓存忽略。当使用Direct I/O 时,数据直接从磁盘读取到应用程序的缓存中,而不是用系统的文件缓存。图4 和图5 说明了在Direct I/O 下的读、写操作。

    4 Direct I/O 的读操作

    5 Direct I/O 的写操作

    2.1.1.1 Direct I/O 的设置方法

    Direct I/O 可以通过两种方式实现,一是通过在mount 文件系统时加 –o dio 的参数,即 mount –o dio /fs 。二是在调用open() 函数打开一个文件时加O_DIRECT 参数。当一个文件系统在mount 时使用了–o dio 的参数,此文件系统的所有文件缺省都会使用Direct I/O ,你也可以通过namefs 使得Direct I/O 只对文件系统中某个子目录中的文件起作用。例如:文件系统somefs 中有一些文件希望使用Direct I/O 功能,但是其它文件并不希望使用,你可以创建一个子目录subsomefs ,将所有希望使用Direct I/O 功能的文件放入这个子目录,在mount somefs 时不使用-o dio 参数,然后用mount –v namefs –o dio /somefs/subsomefs /somefs 命令mount subsomefs

    Direct I/O 对应用程序I/O 的边界(alignment )和块大小(length )有限制,表1 列出了JFS2 对此的要求,如果应用的I/O 不满足此要求,所有的I/O 操作会按传统的方式(文件缓存)的方式进行,但当数据被传输到应用的缓存后,系统缓存中的拷贝会被抛弃。当使用Direct I/O 时,文件系统的预读功能将不会起作用。

    文件系统的类型
    I/O 的边界(alignmnet
    I/O 块大小(agblksize
    JFS2(AIX 5.2 ML01)
    4K bytes
    4K bytes
    JFS2(AIX 5.2 ML01)
    agblksize
    ( 创建文件系统时的参数)
    agblksize
    ( 创建文件系统时的参数)
    表1 JFSDirect I/O 的限制

    为了避免一致性的问题,当有多个进程同时打开一个文件,而其中有一个或多个进程没有使用O_DIRECT 参数,而其它进程使用了此参数时,文件会按传统的方式(文件缓存)的方式打开,当没有使用O_DIRECT 参数的进程关闭后,文件会转变成Direct I/O 的方式。从文件缓存的方式转变成Direct I/O 的方式有时会产生很大的开销,因为所有在内存中被改变的数据将会被立即写入磁盘。

    2.1.1.2 Direct I/O 对性能的影响

    Direct I/O 对性能的好处,一是降低了CPU 的负载,二是避免数据被拷贝两次(第一次从磁盘到文件缓存,第二次从文件缓存到应用缓存)。但是其它的一些因素会对Direct I/O 的性能产生影响。

    每一次Direct I/O 的读请求会产生对磁盘的一次同步的读操作。而传统的方式首先从系统的文件缓存中读取数据。如果数据可能存在于系统的文件缓存中,那么采用Direct I/O 的方式性能较差。

    Direct I/O 也不使用JFS2 的预读功能。文件系统的预读功能能够提高顺序读取文件时的系统性能。使用预读功能时,当发现应用程序顺序的访问一个文件时,操作系统试图预测此应用将要读取几个文件页,而预先将其读出,这将减少系统I/O 的次数。预读功能由两个参数控制:
    l j2-minPageReadAhead
        当操作系统发现应用顺序读取文件时,所预读的文件页数,却省值为 2
    l j2-maxPageReadAhead
        操作系统最多预读的文件页数,却省值为 8
    这些参数可通过ioo 命令调整。

    2 Direct I/O 和传统缓存的方式在三种不同情况下的性能做了比较,这些测试中文件页的大小为4K bytesj2-minPageReadAhead=2 ,而 j2-maxPageReadAhead=8

    2 Direct I/O vs. cached I/O

    2 中的第一行的情况是应用 个字节一个字节的顺序读取1MB 的文件。当使用Direct I/O 时,由于没有满足4K bytes 边界的限制,因此系统采用传统的文件缓存的方式读取4K 的文件页,其中的一个字节被从系统的文件缓存拷贝到应用的缓存,然后此4K 的文件页被从系统的文件缓存中删除,这就导致读取这4K 中每一个字节时,此4K 的页被反复的读取,而且也没有避免重复拷贝。当使用传统的缓存I/O 时,当读取4K 文件页的第一个字节时,4K 的文件页被读入系统的文件缓存,随后的读取将在文件缓存中进行,而不需要访问磁盘,预读的功能进一步减小了延迟。

    2 中的第二行的情况是应用4K 字节4K 字节的顺序读取1GB 的文件。虽然在这种情况下满足Direct I/O 对于4K bytes 边界的限制,但由于Direct I/O 没有预读的功能,所以虽然两种情况下所读取的数据量基本相同,传统的缓存I/O 的性能仍然好于Direct I/O

    2 中的第三行的情况是应用10M 字节的顺序读取1GB 的文件。Direct I/O 的性能远远好于传统的缓存I/O 。这主要有两个原因:一是Direct I/O 不存在重复拷贝,二是传统的缓存I/O 没有享受到预读的好处。

    这个例子说明,应用程序并不一定能从Direct I/O 中带来性能的改善,然而如果一个应用可以从使用裸设备中得到性能的改善,那么它也能从Direct I/O 中得到好处。

    2.2 Inode

    虽然应用程序把文件看作连续的数据流,但这并不是文件实际在硬盘上的存储方式,实际上文件是以连续或不连续的数据块的方式存储的,每一个文件都有一个数据结构与其对应被称为inode

    Inode 中包含了访问此文件必须的信息,如文件的宿主,访问权限,文件的大小,上一次文件被访问和改变的时间以及文件数据块在磁盘上的分布。需要注意的是文件内容的改变与文件所对应inode 的改变是不同的,文件的内容只在对文件进行了写操作以后改变,而inode 的改变可能是对文件进行了写操作也可能是文件宿主、访问权限以及其它属性的改变。在实际环境中可能有多个进程同时需要改变文件的inode ,这样会造成inode 的不一致,为了避免这种情况的发生,inodeinode 锁的锁机制保护。

    当文件被读取时,inode 不会改变,而写文件时inode 会被改变。JFS2 采用读共享,写独占(read-shared, write-exclusive )的inode 锁的锁机制,允许多个进程同时读一个文件,但当一个进程写文件时,其它进程不允许读写此文件。

    2.2.1 并行I/O (concurrent I/O)

    inode 锁使得对于文件的多个写操作串行处理,这就避免了多个写操作并行时造成的数据的不一致性。而大多数数据库的应用有自己的数据串行处理机制,从而不会造成数据的不一致性。因此它们并不需要操作系统的这种inode 锁的锁机制,实际上在这种情况下inode 锁会对性能产生负面的影响。AIX 5L v5.2 ML01 提供了并行I/O (concurrent I/O) 的功能,在并行I/O 的方式下多个进程可同时对一个文件进行读写操作。并行I/O 是专门对数据库的应用进行设计的,大多数数据库的应用程序不需要修改就可以运行在并行I/O 的模式下。而对于那些没有自己的数据串行处理机制的应用,如果运行在并行I/O 的模式下,可能造成数据的损坏。

    2.2.1.1 并行I/O 的设置方法

    并行I/O 可以通过两种方式实现,一是通过在mount 文件系统时加 –o cio 的参数,即mount –o cio /fs 。二是在调用open() 函数打开一个文件时加O_CIO 参数。当一个文件系统在mount 时使用了–o cio 的参数,此文件系统的所有文件缺省都会使用并行I/O ,你也可以通过namefs 使得并行I/O 只对文件系统中某个子目录中的文件起作用。例如:文件系统somefs 中有一些文件希望使用并行I/O 功能,但是其它文件并不希望使用,你可以创建一个子目录subsomefs ,将所有希望使用并行I/O 功能的文件放入这个子目录,在mount somefs 时不使用-o cio 参数,然后用mount –v namefs –o cio /somefs/subsomefs /somefs 命令mount subsomefs

    并行I/O 缺省会包含Direct I/O 的功能,因此O_CIO 参数会覆盖O_DIRECT 。与Direct I/O 相似,当有多个进程同时打开一个文件,而其中有一个或多个进程没有使用O_CIO 参数,而其它进程使用了此参数时,文件的访问将不会按并行I/O 的方式进行,当没有使用O_CIO 参数的进程关闭后,文件会转变成并行I/O 的方式。

    并行I/O 的方式下,inode 锁工作在读共享,写共享的方式下,然而当inode 改变并不是由于对文件内容进行写操作,而是由于inode 的其它属性改变时,此时需要inode 锁工作在写独占的模式下。例如文件增大或减小时,增大一个文件需要将磁盘上的空闲数据块分配给这个文件,此时需要改变相应inode 的内容,在这种情况下读共享的inode 锁升级为写独占的inode 锁,当操作完成后inode 锁恢复成读共享的方式。这是一个非常有用的功能,这就意味着在并行I/O 的方式下,允许文件动态的增大或减小而不需要关闭这个文件。

    2.2.1.2 并行I/O 对性能的影响

    既然并行I/O 中包含了Direct I/O ,所有Direct I/O 对性能的影响也适用于并行I/O 。如果应用程序会从预读功能中得到好处,或在系统的文件缓存中有较高的命中率,那么在并行I/O 的方式下会对性能产生负面的影响。并行I/O 也不会对绝大多数I/O 操作为读的应用产生性能的提高,因为在这种情况下读共享,写独占(read-shared, write-exclusive)的inode 锁的锁机制提供了与并行I/O 相似的方式。

    3.性能测试环境

    为了评价并行I/O 对性能的影响,我们测试了典型的在线交易(OLTP )的应用在不同存储配置下的性能,我们选用的数据库是Oracle9i 。此应用工作在client/server 的体系结构下,其负载中有许多更新的操作。测试结果通过在客户端每秒钟完成的交易量来衡量(tps )同时衡量响应时间,我们选取了三种不同的数据库的存储配置:
    l 裸设备
    l JFS2 文件系统+Direct I/O
    l JFS2 文件系统+ 并行I/O
    系统的配置见表3:

    表3 系统配置
    在作数据库性能测试的时候通常使用裸设备进行数据的存储,这是因为裸设备没有文件系统的开销,通常可以得到最好的性能,在本测试中基于裸设备的测试结果作为基于文件系统的测试所追求的目标。

    4.测试结果

    表4和图6给出了在每一种存储配置下的平均吞吐率(每秒钟完成的交易量tps )和平均响应时间,虽然平均吞吐率Direct I/O比裸设备低了70%,但是同步I/O只比裸设备低了8%。由此可见Direct I/O性能差的关键是由于严重的inode锁。

    表4 平均吞吐率和平均响应时间

    图6 吞吐率

    并行I/O 与裸设备性能的不同主要由两个因素决定,一是对文件系统的访问比对裸设备的访问多了一层,对于文件系统,应用需要先访问文件系统,文件系统再访问LV,而对于裸设备,应用直接访问LV。二是由于异步I/O(AIO),AIO的进程是一个核心进程,当AIO的进程访问文件系统的文件时需要进行context switch。而对于裸设备的异步I/O时由系统核心完成的,不需要进行context switch。

    对于系统锁的研究可以发现三种存储模式的特点。我们使用了AIX的trace工具来获取系统锁的信息。在这里我们首先解释一下AIX 5.2的锁机制,当系统的一个进程或线程试图得到一个系统锁而没有成功,它会不断尝试去取得这个系统锁,尝试的次数由maxspin参数决定,其缺省值为16384, maxspin参数可由AIX schedo命令修改。当此进程或线程尝试了maxspin次后仍然没有取得这个系统锁,此进程或线程会由运行状态转变为等待状态。当取得此系统锁的进程或线程释放了这个系统锁后,它会激活一个或多个等待此系统锁的进程或线程。

    图7说明了在测试当中每种情况下最多的系统锁,通过trace的工具我们观察到了三种主要的系统锁:
    l AIOQ锁:防止多个进程同时从AIO队列中插入或删除AIO的请求的锁。
    l Inode锁:防止多个进程同时更新Inode的锁。
    l SSA 锁:防止多个进程同时访问SSA设备的锁
    从图6中可以看出在Direct I/O的方式下,系统的瓶颈是在Inode锁上,这会造成大量的context switch, 大量的进程处于等待状态,并且CPU也处于等待状态。降低了整个系统的吞吐率。而在裸设备和同步I/Od的方式下,没有大量的inode写保护锁。

    图7 不同模式下主要的系统锁类型

    5.结论

    本文中的性能测试表明,对于数据库的应用,采用JFS2的并行I/O 的数据存储方式可以获得与采用裸设备的数据存储方式相似的性能,但却可使得数据的管理更加方便灵活。这说明并行I/O 技术适用于数据库的应用。

 

 增强 JFS 文件系统为它的缓冲区高速缓存使用客户机文件,这不受 maxperm 和 minperm 阈值的影响。为了在增强 JFS 文件系统的高速缓存中建立硬性限制,您可以调谐 maxclient 的参数。该参数代表了可用于缓冲区高速缓存的客户机页面的最大值。要更改这个值,可以使用 vmo -o maxclient 命令。maxclient 的值显示为实内存的百分比。
  在到达 maxclient 阈值后,LRU 开始取用最近尚未访问过的客户机页面。如果没有足够的客户机页面可以被窃取,LRU 会替换掉其它类型的页。通过减少 maxclient 的值,您可以帮助阻止增强 JFS 文件页的访问不要替换掉工作存储页面,最小化调页空间的页面调度。maxclient 参数也影响 NFS 客户机和压缩的页面。另请注意 maxclient 通常应该设置为一个小于或等于 maxperm 的值,特别是在启用了 strict_maxperm 的情况下。
  另外几个重要的参数有 minperm 和 maxperm 以及 strict_maxperm
  操作系统通过把在曾经读写的内存页留在实内存一满足不同要求。如果文件页面在它们的页帧被重新分配前被请求,那就节省了输入输出操作。该文件页面可以来自本地的或远程的(如 NFS)系统。
  页帧使用的文件相对用于计算的(工作或程序文本)段的文件的比例是松散地受控于 minperm 和 maxperm 的值的:
  如果 RAM 中文件页面所占的百分比高于 maxperm,页面替换的窃取只用于文件页。
  如果 RAM 中文件页面所占的百分比低于 minperm,页面替换的窃取同时用于文件页和计算页。
  如果 RAM 中文件页面所占的百分比介于 minperm 和 maxperm之间,页面替换只窃取文件页,除非文件页的重调入数量大。

1)      AIX parameters
According to SAP note 78498; please change the AIX operation parameters by vmtune -p3 -P8 -t8 , then use vmstat –v to check if it ok or not.
 
              4055040 memory pages
              3846729 lruable pages
                 6222 free pages
                    2 memory pools
               661535 pinned pages
                 80.0 maxpin percentage
                  5.0 minperm percentage à3
                 20.0 maxperm percentage à8
                 19.9 numperm percentage
               766331 file pages
                  0.0 compressed percentage
                    0 compressed pages
                 19.9 numclient percentage
                 20.0 maxclient percentage à8
               766331 client pages
                    0 remote pageouts scheduled
                   33 pending disk I/Os blocked with no pbuf
              4508118 paging space I/Os blocked with no psbuf
                 2740 filesystem I/Os blocked with no fsbuf
                   33 client filesystem I/Os blocked with no fsbuf
                   86 external pager filesystem I/Os blocked with no fsbuf
                    0 Virtualized Partition Memory Page Faults
                 0.00 Time resolving virtualized partition memory page faults
 
 
2)      Work processes number:
Current setting is 12 dialog work process and 10 background process. Please change to 25 dialog work process and 6 background process.
 
3)      Oracle parameters

 

编辑 | 阅读全文(1008) | 回复(1),古老虾 发表于 2007-4-28 9:55

2006-7-6 13:43 | 认识一下系统建模

关键字:系统建模

模型是对现实的简化。模型提供了系统的蓝图。模型既可以包括详细的计划,也可以包括从很高的层次考虑系统的总体计划。一个好的模型包括那些有广泛影响的主要元素,而忽略那些与给定的抽象水平不相关的次要元素。每个系统都可以从不同的方面用不同的模型来描述,因而每个模型都是一个在语义上闭合的系统抽象。模型可以是结构性的,强调系统的组织。它也可以是行为性的,强调系统的动态方面。

建模是一项经过检验并被广为接受的工程技术。建立房屋和大厦的建筑模型,能帮助用户得到实际建筑物的印象,甚至可以建立数学模型来分析大风或地震对建筑物造成的影响。建模是为了能够更好地理解正在开发的系统。通过建模,要达到4个目的:

  (1)模型有助于按照实际情况或按照所需要的样式对系统进行可视化。

  (2)模型能够规约系统的结构或行为。

  (3)模型给出了指导构造系统的模板。

  (4)模型对做出的决策进行文档化

 人对复杂问题的理解能力是有限的。通过建模,缩小所研究问题的范围,一次只着重研究它的一个方面,这就是Edsger Dijkstra几年前讲的"分而治之"的基本方法,即把一个困难问题划分成一系列能够解决的小问题;解决了这些小问题也就解决了这个难题。此外,通过建模可以增强人的智力。一个适当选择的模型可以使建模人员在较高的抽象层次上工作。
每个项目都能从一些建模中受益。即使在一次性的软件开发中由于可视化编程语言的支持,可以轻而易举地扔掉不适合的软件。建模也能帮助开发组更好地对系统计划进行可视化,并帮助他们正确地进行构造,使开发工作进展得更快。如果根本不建模,项目越复杂,就越有可能失败或者构造出错误的东西。所有实用系统都有一个自然趋势:随着时间的推移变得越来越复杂。虽然今天可能认为不需要建模,但随着系统的演化,终将会对这个决定感到后悔,但那时为时已晚

编辑 | 阅读全文(3748) | 回复(0),古老虾 发表于 2006-7-6 13:43
第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。
第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。
第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。
第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。
这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。
第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。
第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。
此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。
每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。
要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。
现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。
但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。
编辑 | 阅读全文(3182) | 回复(0),古老虾 发表于 2006-6-28 8:7

2006-4-6 10:36 | 网络访问控制技巧

1、访问控制列表(Access Control List,ACL) 是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk等。ACL的定义也是基于每一种协议的。如果路由器接口配置成为支持三种协议(IP、AppleTalk以及IPX)的情况,那么,用户必须定义三种ACL来分别控制这三种协议的数据包。
2、ACL的作用
  ACL可以限制网络流量、提高网络性能。例如,ACL可以根据数据包的协议,指定数据包的优先级。ACL提供对通信流量的控制手段。例如,ACL可以限定或简化路由更新信息的长度,从而限制通过路由器某一网段的通信流量。ACL是提供网络安全访问的基本手段。ACL可以在路由器端口处决定哪种类型的通信流量被转发或被阻塞。例如,用户可以允许E-mail通信流量被路由,拒绝所有的Telnet通信流量。
3、
标准ACL要尽量靠近目的端。

4、扩展ACL要尽量靠近源端。

5、in和out参数可以控制接口中不同方向的数据包,如果不配置该参数,缺省为out。

编辑 | 阅读全文(3174) | 回复(0),古老虾 发表于 2006-4-6 10:36

Unicode是一种字符编码规范 。

先从ASCII说起。ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits)

因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他一些符号 。

而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其他符号

这种字符编码规范显然用来处理英文没有什么问题 。(实际上也可以用来处理法文、德文等一些其他的西欧字符,但是不能和英文通用),但是面对中文、阿拉伯文之类复杂的文字,255个字符显然不够用

于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312-80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII字符来表示。

但是这个方法有问题,最大的问题就是,中文文字没有真正属于自己的编码,因为扩展ASCII码虽然没有真正的标准化,但是PC里的ASCII码还是有一个事实标准的(存放着英文制表符),所以很多软件利用这些符号来画表格。这样的软件用到中文系统中,这些表格符就会被误认作中文字,破坏版面。而且,统计中英文混合字符串中的字数,也是比较复杂的,我们必须判断一个ASCII码是否扩展,以及它的下一个ASCII是否扩展,然后才“猜”那可能是一个中文字 。

总之当时处理中文是很痛苦的。而更痛苦的是GB2312是国家标准,台湾当时有一个Big5编码标准,很多编码和GB是相同的,所以……,嘿嘿。

这时候,我们就知道,要真正解决中文问题,不能从扩展ASCII的角度入手,也不能仅靠中国一家来解决。而必须有一个全新的编码系统,这个系统要可以将中文、英文、法文、德文……等等所有的文字统一起来考虑,为每个文字都分配一个单独的编码,这样才不会有上面那种现象出现。

于是,Unicode诞生了。

Unicode有两套标准,一套叫UCS-2(Unicode-16),用2个字节为字符编码,另一套叫UCS-4(Unicode-32),用4个字节为字符编码。

以目前常用的UCS-2为例,它可以表示的字符数为2^16=65535,基本上可以容纳所有的欧美字符和绝大部分的亚洲字符 。

UTF-8的问题后面会提到 。

在Unicode里,所有的字符被一视同仁。汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,注意,现在的汉字是“一个字符”了,于是,拆字、统计字数这些问题也就自然而然的解决了 。

但是,这个世界不是理想的,不可能在一夜之间所有的系统都使用Unicode来处理字符,所以Unicode在诞生之日,就必须考虑一个严峻的问题:和ASCII字符集之间的不兼容问题。

我们知道,ASCII字符是单个字节的,比如“A”的ASCII是65。而Unicode是双字节的,比如“A”的Unicode是0065,这就造成了一个非常大的问题:以前处理ASCII的那套机制不能被用来处理Unicode了 。

另一个更加严重的问题是,C语言使用'\0'作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉 。

于是,比Unicode更伟大的东东诞生了,之所以说它更伟大是因为它让Unicode不再存在于纸上,而是真实的存在于我们大家的电脑中。那就是:UTF 。

UTF= UCS Transformation Format UCS转换格式

它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2种:UTF-8和UTF-16 。

其中UTF-16和上面提到的Unicode本身的编码规范是一致的,这里不多说了。而UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼容 。

UTF-8有点类似于Haffman编码,它将Unicode编码为00000000-0000007F的字符,用单个字节来表示;

00000080-000007FF的字符用两个字节表示

00000800-0000FFFF的字符用3字节表示

因为目前为止Unicode-16规范没有指定FFFF以上的字符,所以UTF-8最多是使用3个字节来表示一个字符。但理论上来说,UTF-8最多需要用6字节表示一个字符。

在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。而中文的编码范围是在0080-07FF之间,因此是2个字节表示(但这两个字节和GB编码的两个字节是不同的),用专门的Unicode处理类可以对UTF编码进行处理。

下面说说中文的问题。

由于历史的原因,在Unicode之前,一共存在过3套中文编码标准。

GB2312-80,是中国大陆使用的国家标准,其中一共编码了6763个常用简体汉字。Big5,是台湾使用的编码标准,编码了台湾使用的繁体汉字,大概有8千多个。HKSCS,是中国香港使用的编码标准,字体也是繁体,但跟Big5有所不同。

这3套编码标准都采用了两个扩展ASCII的方法,因此,几套编码互不兼容,而且编码区间也各有不同

因为其不兼容性,在同一个系统中同时显示GB和Big5基本上是不可能的。当时的南极星、RichWin等等软件,在自动识别中文编码、自动显示正确编码方面都做了很多努力 。

他们用了怎样的技术我就不得而知了,我知道好像南极星曾经以同屏显示繁简中文为卖点。

后来,由于各方面的原因,国际上又制定了针对中文的统一字符集GBK和GB18030,其中GBK已经在Windows、Linux等多种操作系统中被实现。

GBK兼容GB2312,并增加了大量不常用汉字,还加入了几乎所有的Big5中的繁体汉字。但是GBK中的繁体汉字和Big5中的几乎不兼容。

GB18030相当于是GBK的超集,比GBK包含的字符更多。据我所知目前还没有操作系统直接支持GB18030。

谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:

问题一:
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?

我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?

问题二:
最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。
查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。

0、big endian和little endian
big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。

“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。

我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。

1、字符编码、内码,顺带介绍汉字编码
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

这里还有一些细节:

GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。

在DBCS中,GB内码的存储格式始终是big endian,即高位在前。

GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。

2、Unicode、UCS和UTF
前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。

Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。

根据维基百科全书(http://zh.wikipedia.org/wiki/)的记载:历史上存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。

在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。

目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2005年的Unicode 4.1.0。ISO的最新标准是10646-3:2003。

UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。

IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述了UTF-16和UTF-8的编码方法。我总是记不得IETF是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。

3、UCS-2、UCS-4、BMP

UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。下面让我们做一些简单的数学游戏:

UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。

UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。

group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。

将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。

4、UTF编码

UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:

UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

读者可以用记事本测试一下我们的编码是否正确。

UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。

5、UTF的字节序和BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:

在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

6、进一步的参考资料
本文主要参考的资料是 "Short overview of ISO-IEC 10646 and Unicode" (
http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html)。

我还找了两篇看上去不错的资料,不过因为我开始的疑问都找到了答案,所以就没有看:

"Understanding Unicode A general introduction to the Unicode Standard" (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a)
"Character set encoding basics Understanding character set encodings and legacy encodi

编辑 | 阅读全文(2829) | 回复(0),古老虾 发表于 2006-3-18 9:6

2005-11-29 10:7 | 老虾谈技术之网络监控

很久没有钻研技术了,老虾所在公司反映最近网络安全存在比较大的问题,信手捏来SNIFFER,研究如下: 

一、常用功能介绍
  1、Dashboard (网络流量表)
  点击图1中①所指的图标,出现三个表,第一个表显示的是网络的使用率(Utilization),第二个表显示的是网络的每秒钟通过的包数量(Packets),第三个表显示的是网络的每秒错误率(Errors)。通过这三个表可以直观的观察到网络的使用情况,红色部分显示的是根据网络要求设置的上限。
  选择图1中②所指的选项将显示如图2所示的更为详细的网络相关数据的曲线图。每个子项的含义无需多言,下面介绍一下测试网络速度中的几个常用单位。
  在TCP/IP协议中,数据被分成若干个包(Packets)进行传输,包的大小跟操作系统和网络带宽都有关系,一般为64、128、256、512、1024、1460等,包的单位是字节。
  很多初学者对Kbps、KB、Mbps 等单位不太明白,B 和 b 分别代表 Bytes(字节) 和 bits(比特),1比特就是0或1。1 Byte = 8 bits 。
  1Mbps (megabits per second兆比特每秒),亦即 1 x 1024 / 8 = 128KB/sec(字节/秒),我们常用的ADSL下行512K指的是每秒?512K比特(Kb), 也就是每秒512/8=64K字节(KB)


图1

图2

  2、Host table(主机列表)
  如图3所示,点击图3中①所指的图标,出现图中显示的界面,选择图中②所指的IP选项,界面中出现的是所有在线的本网主机地址及连到外网的外网服务器地址,此时想看看192.168.113.88这台机器的上网情况,只需如图中③所示单击该地址出现图4界面。


图3

  图4中清楚地显示出该机器连接的地址。
  点击左栏中其它的图标都会弹出该机器连接情况的相关数据的界面。 

图4

  3、Detail(协议列表)
  点击图5所示的“Detail”图标,图中显示的是整个网络中的协议分布情况,可清楚地看出哪台机器运行了那些协议。注意,此时是在图3的界面上点击的,如果在图4的界面上点击显示的是那台机器的情况。


图5

  4、Bar(流量列表)
  点击图6所示的“Bar”图标,图中显示的是整个网络中的机器所用带宽前10名的情况。显示方式是柱状图,图7显示的内容与图6相同,只是显示方式是饼图。


图6

图7

  5、Matrix (网络连接)
  点击图8中箭头所指的图标,出现全网的连接示意图,图中绿线表示正在发生的网络连接,蓝线表示过去发生的连接。将鼠标放到线上可以看出连接情况。鼠标右键在弹出的菜单中可选择放大(zoom)此图。


图8

二、抓包研究

1、TELNET 密码

关键点:定义好IP、定义协议和包大小(55字节)。

包大小定义:

网上的数据传送是把数据分成若干个包来传送,根据协议的不同包的大小也不相同,当客户端telnet到服务端时一次只传送一个字节的数据,由于协议的头长度是一定的,所以telnet的数据包大小=DLC(14字节)+IP(20字节)+TCP(20字节)+数据(一个字节)=55字节,这样将Packet Size设为55正好能抓到用户名和密码,否则将抓到许多不相关的包。

2、抓FTP密码

关键点:将 Packet Size设置为 In Between 63 -71, Packet Type 设置为 Normal。选择Data Pattern项,点击箭头所指的Add Pattern按钮,按图设置OFFset为2F,方格内填入18,name可任意起。确定后点击Add NOT按钮,再点击Add Pattern按钮增加第二条规则,设置OFFset为F,方格内填入10,name可任意起。按图23所示设置好规则。

3、抓HTTP密码

设置规则
  按照下图进行设置规则,设置方法同上。




 

 

编辑 | 阅读全文(2990) | 回复(0),古老虾 发表于 2005-11-29 10:7
说到“网上邻居”,相信很多人都很熟悉。操作系统安装完毕后,桌面上仅有的几个图标中就包含了“网上邻居”。

  但是,要说起“网上邻居”的工作机制,可能大家就不太清楚了。

  要说“网上邻居”的工作机制,需要联系一下生活中的例子:比如我——UU,要拜访一个远方的朋友——PP,我要去他的家里,那么应该怎么样做?答案是先找到PP的家,然后再确定看看PP让不让我进他的家里。不要认为这是笑话,“网上邻居”的工作机制就是这样的。

 

  “网上邻居”也是浏览器?

  在一个局域网中,只要双击桌面的“网上邻居”,就能看到所在网络中的所有用户,这一切似乎都顺理成章。可你有否想过:Windows怎么知道这些电脑叫什么名字、在什么地方?它是如何获得它们的位置的?

  在阐述这个问题之前,先来举一个例子:新生入学时,所有学生来到教室,坐在自己的位置上,这时每个同学之间互不相识,怎样才能互相熟悉呢?大家一定会想到自我介绍,没错,如果所有人都在座位上,依次自我介绍就可以了。

  但如果现在有人缺席,或今后有人转学,过几天又有新生入学怎么办?所以,需要班长来做一件工作——建立花名册,登记所有同学的名字,并及时修改,用于其他同学查询。
  这样还不够,如果所有人都找班长问问题,班长一定会忙不过来,所以其他班干部也要复印一份花名册,分担班长的工作压力。

Windows中“网上邻居”的工作机制和这个例子十分相似,我们一起来看看下面这部大片吧。

  【片  名】 “网上邻居”在行动
  【出品公司】 Microsoft
  【出品年代】 Windows 95流行时期
  【适合观众】 电脑爱好者
  【导  演】 比尔·盖茨
  【主  演】 主浏览器—班长

  备份浏览器—班干部
  浏览列表—花名册
  客户机—班级成员

  从Windows 2000开始,通过“网上邻居”进行的访问实际上是通过browser service(浏览服务)来进行的,下面就浏览服务的几个关键地方向大家讲解一下。

  1.花名册——浏览列表(browser list)

  浏览列表就像是班级的花名册,是浏览服务的关键部分。通过这个列表,基于Windows的电脑才能发现处于网络上面的电脑和服务资源,浏览列表像一个地址簿,它告诉你的电脑在哪里有资源。你的电脑通过这个列表中的信息将电脑名称解析成IP地址,提供给用户来进行访问。

  2.班长与副班长——不同类型的浏览器

  Windows的浏览服务体系由一个主浏览器(master browser)、多个备份浏览器(backup browsers)和浏览客户端(browser clients)组成,这有点像上面例子中的班长、副班长和班级成员。主浏览器负责维护当前网络中的浏览列表,并将这个浏览列表发送到备份浏览器,而浏览服务的客户机通过查询备份浏览器来获得当前环境中的浏览列表。

  3.班级成员——客户机

  使用“网上邻居”进行浏览的客户机,就好像班级的普通成员,他们需要通过班长或是副班长来获得花名册,从而得知其他同学的位置和名字。

“民主”的查询过程

  下面我们来描述一下完整的浏览查询过程。

  1.一个客户机的查询过程

  当一台电脑需要浏览网络时,它需要知道网络中的资源列表(也就是浏览列表),那么它需要发送数据报u到备份浏览器(Backup Browser)那里去查询。这就好像新来的同学不知谁是副班长一样,首次浏览网络的电脑并不知道谁是备份浏览器。这时,它会执行一个“广播”操作。

  这个操作和真正广播有点类似,它的作用像是对全班大声宣布:“谁是班长?我是UU,我来了!”这个声音只有班长(主浏览器)会听到。主流浏览器取得这个通告后,将它放入自己维护的花名册(浏览列表)中,用来给其他人查询。

  小提示

  为什么有的电脑在“网上邻居”中看不到?

  大家都知道,要在“网上邻居”中看到自己和别人,必须在TCP/IP协议上选中“文件及打印机共享”这个选项。这是为什么呢?原因是这样的:如果没有选定这个选项,该计算机即使连入局域网,也不会发出通告,“班长”不知道,其他电脑自然也就不会在“网上邻居”里看到它了。

  客户机向当前网络中的主浏览器(Master Browser)发送一个叫“GetBackupList”的数据报,当主浏览器收到这个数据报之后,它就会提供当前网络中的可用备份浏览器的列表(也就是“副班长”的名单和位置),客户机从这个列表中选择三个备份浏览器的信息,并缓存起来。从此以后,浏览服务就从这三个信息中选择一个进行查询工作。

  u 数据报
  一种独立的数据实体,它包含从源电脑传送到目标电脑的完整信息,而源电脑和目标电脑及传输网络之间先前无需进行数据交换。 简而言之,数据报是TCP/IP在通过网络传送文件之前,将其预先打包划分的形式。

  小提示

  如果一个客户机三次无法联络到主浏览器(这就是网络中可能存在的丢包情况),那么它就会发起一个新的主浏览器的选举(关于选举,将在下文中阐述),并且向调用浏览服务的应用软件发一个叫“ERROR_BAD_NETPATH”的通知,“网上邻居”就会报告“无法找到网络路径”之类的错误信息。

  实例:把我的电脑在“网上邻居”上隐藏

  要完成这个目的,可以通过一个命令来实现:

  在“运行”窗口输入NET CONFIG SERVER /HIDDEN:YES
  回车后,别人会发现你从“网上邻居”中消失了。
  注意这个/HIDDEN参数,YES代表隐藏,NO代表不隐藏。



  2.主浏览器也要“民主”产生

  主浏览器是工作组中的一台最为重要的电脑,它负责维护本工作组中的浏览列表及指定其他工作组的主控服务器列表,为本工作组的其他计算机和来访本工作组的计算机提供浏览服务。

  每个工作组都会为每个传输协议选择一个主浏览器,而我们经常遇到的无法浏览网络的错误大多是因为所处的工作组没有主浏览器造成的。

  有时,我们会碰到如图1所示的情况,点击“启动”按钮也无法启动Computer Browser服务。

  主浏览器是怎么产生的呢?缺省情况下,工作组中的主浏览器是该工作组中第一台启用文件及打印机共享功能的电脑,也允许手工将一台电脑配置为主浏览器。如果一个工作组中有多台电脑配置了这个选项,或是当前的主浏览器关闭了系统,又没有其他电脑启用主控设置时,就要进行主控浏览器的选举。


图1

  实例1:选举主浏览器过程

  如果网络中没有了主浏览器,要怎样选举呢?首先,由一台电脑发送一个数据报,该数据报包含了来自发送电脑的信息(操作系统、版本及计算机名等),数据报向网络中广播,工作组中的每一台电脑都会用自身信息与它进行优先级比较,操作系统的版本起主要作用。最后,自身条件最好的电脑成为新的主浏览器。

  系统将按照以下优先级顺序从电脑中选择主浏览器和备份浏览器:

  Windows Server 2003
  Windows XP
  Windows 2000 Advanced Server
  Windows 2000 Server
  Windows 2000 Professional
  Microsoft Windows NT 4.0 Server Enterprise Edition
  Microsoft Windows NT 4.0 Server
  Microsoft Windows NT 4.0 Workstation
  Microsoft Windows 98
  Microsoft Windows 95
  Microsoft Windows for Workgroups 3.11

  另外,如果一台电脑的运行时间相对较长,在同等条件下它会赢得选举。如果最后所有因素都相同,那么选举会采用字符标准(包含数字和符号),就是说如果一台电脑名字为“A”,和名字为“X”的电脑比较,那么“A”就会赢得选举。

  实例2:指定某台电脑为主浏览器

  难道主浏览器就必须选举产生,不能指定吗?其实也不是,作为管理员,只要在希望成为主浏览器的机器(一般配置较高)上打开注册表编辑器,在[HKEY_LOCAL_MACHINE
  /SYSTEM/CurrentControlSet/Services/Browser/Parameters]一项中,将注册表键“IsDomainMaster”的值改为“True”即可。这样,这台电脑就会成为一个主浏览器。

  这台电脑启动时,如果网络中已经有了主浏览器,那么它就会发起一个新的选举,而在选举中它常常会赢得选举(难道是贿选?)。当然,如果其他电脑也配置了这个选项,那么它们之间的竞争就要看选举的规则了。

让某台机器永远不成为浏览器

  如果为了降低某台机器的负载,希望它永远不成为浏览器,可以在[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Browser
  /Parameters]一项中修改“MaintainServerList”的值为“No”就可以了,代表这台电脑将不会成为浏览提供者,同时Computer Browser服务也将无法启动,强行启动就会出现图1中的故障。

  3.一个客户机的通知过程

  通知,作为维护浏览列表的主要手段,其种类很多,这里只介绍一个客户机的通知。一个新来的客户机,要告诉主浏览器“我来了”,一台新联入网络的电脑会发送一个直接的数据报给主浏览器告知这台计算机的存在,而主浏览器,会将这个信息加入Browser List,并每隔一段周期进行验证。

  初次进行时,这个周期是1分钟、2分钟、4分钟和8分钟,最后到12分钟,而之后每12分钟客户机都会发一个通知,通知主浏览器“我还在呢”。如果经过三个周期(36分钟),主浏览器都没有听到“我还在呢”的通知,那么它就会把这个客户机的名字从Browser List中删除掉,“网上邻居”中就再也不会有这个用户了。

  实例:解读“机去楼不空”的常见现象

  问题:一台连入网络的电脑非正常关机,比如down掉了,为什么在“网上邻居”中还可以看到它,但不能访问呢(见图2)?


图2

  原因:因为主浏览器会在三个周期之后才会把它从Browser List中删除,这个周期是36分钟,而备份浏览器从主浏览器那里同步数据还要12分钟,一个客户机会缓存三个备份浏览器的信息,所以这个删除操作在整个网络中通知到常常要花费72分钟的时间,也就是说要72分钟整个网络中的电脑才会知道某某电脑没有了。

  解决方法1:静静地等待一段时间,如果只是简单网络,往往一台电脑既是主浏览器又是备份浏览器,所以等待一段时间,最长36分钟之后,这个问题就会解决。

  解决方法2:修改通知周期。如果修改通知周期,那么这个36分钟的累计时间就会减少,修改方法:在注册表中修改[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet
  /Services/lanmanserver/parameters]项,新建一个“Announce”的键值,类型为REG_DWORD,数值默认为720,对应12分钟。

  小提示

  修改通知周期,要在所有的联入网络的计算机上修改才会有效,增加通知周期会减少网络中数据报的数量,但是会花费更长的时间来维护浏览列表;如果减少通知周期,浏览列表会更快地完成更新,但网络中的数据报流量会大幅增加。所以,是否修改,要根据自己网络的实际情况具体决定。

网上邻居”强力技巧 + 故障解决

  1.强力技巧

  (1)让“网上邻居”实现多点下载和断点续传

  很多人喜欢直接通过访问“网上邻居”来共享文件,但使用“网上邻居”则有诸多不便:既不能多点下载,又无法断点续传。其实只要在本地机器架设FTP服务器,就可以让“网上邻居”实现多点下载和断点续传。具体做法如下。

  在本地电脑上利用SERV-U架设FTP服务器,然后设置站点和用户权限,在这里按照默认选项设置就行了。有关SERV-U架设的基本操作,很多文章已经介绍,这里不再赘述。

  在SERV-U中添加虚拟目录。在第一步“Physical path”的地方直接填入共享名,如//192.168.0.1/xxx之类。后续步骤与添加本地目录方法相同。

  通过Flashget的站点资源探索器进入ftp://192.168.0.1(也就是下载文件所在计算机的IP地址)。进入相应目录后,在右边窗口文件列表中选择要下载的文件或目录,单击右键,选择“下载”。

  由于利用了Flashget的多点下载属性,在局域网条件下可以极大提高速度,网络状况良好情况下是原速度的若干倍,同时可以完美支持断点续传。

  (2)不将最新打开的共享文档添加到“网上邻居”中

  Windows会在“网上邻居”中自动记忆下最近打开过的共享文档,如果不喜欢这项设置,可以在[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies
  /Explorer]下新建一个名为“NoRecentDocsNetHood”的DWORD,然后将它赋值为1即可。

  (3)让“邻居”更容易找到自己

  一般情况下,一块网卡只能配置一个IP地址,但实际上可以为它添加更多IP地址。这样,你的电脑将会更频繁地向网络发送广播信息,对于新安装的操作系统,此方法可以帮助别人尽快找到你。在本地网卡上依次点击“属性→TCP/IP属性→高级”,然后按下“添加”按钮即可输入新的IP地址和子网掩码。

  小提示
  虽然一块网卡可以配置多个IP地址,但在网络邻居中连接的IP地址只有一个—网卡所配置的第一个IP地址。

(4)删除“网上邻居”保存的密码

  访问网上邻居时提示输入密码,我为了方便,点了保存密码,但现在不想要这台电脑保存这个密码了,该如何清除呢?Windows XP的方法是依次进入“设置→控制面板→用户帐户”,然后点击你的账号,再点击左上角的“管理我的网络密码”。

  如果是Windows 9x用户,只要删除该用户的PWL文件即可。

  
(5)加速“网上邻居”的启动速度

  进入Windows XP的“网上邻居”后,它会搜索自己的共享目录、共享打印机以及和网络相关的计划任务,然后才显示出来,这样速度会慢很多。这些功能对我们没多大用的话,可以将其删除。在注册表编辑器中找到[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current Version/Explore/RemoteComputer/NameSpace],删除其下的{2227A280-3AEA-1069-A2DE08002B30309D}(打印机)和{D6277990-4C6A-11CF87- 00AA0060F5BF}(计划任务),重启即可。

  
2.故障解决方案

  故障现象1:一个小型网络,电脑之间物理连接没有任何问题,每台电脑都没有安装任何防火墙软件,但其中一台电脑出现“网上邻居”没有任何信息,输入“NET VIEW”命令结果是“清单是空的”,但是,网络中的其他电脑“网上邻居”中却有这台电脑的信息,并能正常访问。

  原因:由于“Microsoft 网络客户端”协议没有绑定,或Workstation服务不正常造成的(见图3)。


图3

  解决方法:将“Microsoft网络客户端”协议勾选,这一点对于Windows 98系统同样重要,只是设置的位置有所区别。

(4)删除“网上邻居”保存的密码

  访问网上邻居时提示输入密码,我为了方便,点了保存密码,但现在不想要这台电脑保存这个密码了,该如何清除呢?Windows XP的方法是依次进入“设置→控制面板→用户帐户”,然后点击你的账号,再点击左上角的“管理我的网络密码”。

  如果是Windows 9x用户,只要删除该用户的PWL文件即可。

  
(5)加速“网上邻居”的启动速度

  进入Windows XP的“网上邻居”后,它会搜索自己的共享目录、共享打印机以及和网络相关的计划任务,然后才显示出来,这样速度会慢很多。这些功能对我们没多大用的话,可以将其删除。在注册表编辑器中找到[HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current Version/Explore/RemoteComputer/NameSpace],删除其下的{2227A280-3AEA-1069-A2DE08002B30309D}(打印机)和{D6277990-4C6A-11CF87- 00AA0060F5BF}(计划任务),重启即可。

编辑 | 阅读全文(3521) | 回复(1),古老虾 发表于 2005-11-23 8:35

[编者按]软件测试职业相对比较年轻,下文从软件测试谈起,也非常适合ITer学习新领域知识。

【摘要】 软件质量越来越受到人们的关注,软件测试作为新兴行业有很多不完善的地方。很多从事软件测试工作的同行处于迷茫之中,如何提高,如何解决测试工作中的实际问题,困惑着每一个人。本文总结了一下个人经验,希望对大家有帮助。

【关键词】 软件测试 软件 测试学习 软件测试工程师

  我最初参加测试工作的时候,不知道什么是软件测试,集成测试和系统测试的概念经常混淆, CMM 是什么就更加不知道了。那时候最简单的开关机也是通过直接拔插电源完成,安装系统对我来说简直是有史以来人类的最高技能,对于那些拿着螺丝刀安装机器的人就认为是宇内超级