學習性能調優的一些筆記

發表于:2007-05-26來源:作者:點擊數: 標簽:
學了近一個星期的AIX 性能 監控與調優,今天可以告一段落了??戳嗽S多資料,該消化吸收的都已經記在腦子里了;還有一些東西感覺有必要記錄在紙面上。這些都是東拼西湊摘錄來的,如下: ps -ef|sort +3 -r來看最近或感覺系統緊張時的哪些程序占用比較大,看C
    學了近一個星期的AIX性能監控與調優,今天可以告一段落了??戳嗽S多資料,該消化吸收的都已經記在腦子里了;還有一些東西感覺有必要記錄在紙面上。這些都是東拼西湊摘錄來的,如下:

ps -ef|sort +3 -r來看最近或感覺系統緊張時的哪些程序占用比較大,看C列。
c
每次系統時鐘周期和發現進程或線程運行時增加進程或線程的 CPU 利用率。調度程序通過每秒除 2 將該值衰減。對于 sched_other 策略,CPU 利用率用于確定進程調度優先級。大值表示一個 CPU 密集處理且造成更低的進程優先級而小值表示一個 I/O 密集處理且造成更高的優先級。該字段的缺省頭為 C。

  換頁空間是真實內存的后備。真實內存被操作系統劃分為4KB的頁框(page frame)。每個頁都可以在換頁空間中有一個或多個4KB頁作為其后備。真實內存中裝入的所有程序和數據所占用的頁框,與換頁空間中的頁都有映射關系。
  操作系統維護所有頁框的狀態,當系統需要某些代碼或數據時,如果真實內存有空閑的頁框,就直接使用它們。如果沒有,操作系統將查找最近最少使用的頁框,然后判斷其內容與換頁空間中的對應內容有無區別,如果有區別,操作系統把頁框內容寫到換頁空間中,這稱為“換出”,然后把新的代碼或數據移到騰出的頁框中;如果沒有區別,操作系統將直接用新的代碼或數據覆蓋頁框內容,這稱為“偷換”。
  當系統需要那些在真實內存中沒有,但換頁空間中存在代碼或數據時,操作系統依然根據上述原則為其準備可用的頁框,然后把代碼或數據從換頁空間中讀取進來。


程序和數據只有活動部分才必須存在于真實內存中,這使得換頁空間的應用成為可能
換頁空間不是內存的替代品,除了暫存數據外,它不能完成內存的其他功用

  換頁空間暫存內存中暫時不被使用的數據或代碼。當系統中真實內存不夠用時,他把真實內存中最近最少使用的數據換出到換頁空間,從而為需要的程序騰出真實內存空間。
  換頁空間不是內存的代用品,無限增加換頁空間并不能使系統容納更多的應用。如果應用程序需要經常訪問的代碼和數據使用了大多數內存,那么無論有多大的換頁空間,總會造成頻繁的換進換出操作,這時系統將忙于進行換進換出操作,而用于正常處理的資源(包括CPU和I/O)大為減少。如果發生這種情況,就需要擴展物理內存。


換頁空間在硬盤上的位置
換頁空間是屬性為“paging”的邏輯卷
使換頁空間發揮最大性能的原則:
使換頁空間邏輯卷位于物理卷的“center”位置
使用多個大小相差不多的換頁空間設備(邏輯卷),各個設備在不同硬盤上
將換頁空間設備放置在比較空閑的硬盤上
  沒有換頁空間,系統不能啟動。操作系統安裝過程中,在物理卷/dev/hdisk0上創建了默認的換頁空間設備/dev/hd6。


AIX利用VMM進行內存管理,其中虛存由實存+Paging Space(swapspace)組成。并且實存可以大致分為兩類:計算內存和文件型內存,其中文件型內存用于AIX的文件操作的緩存,在缺省情況下,實存的20%-80%用于文件型內存。所以,如果你有dump數據庫等操作,就一定會有大量的文件型內存被利用,并且一直被占用。直至換葉出現或者備份的文件刪除以后,空間才會釋放。

利用vmtune可以控制內存的管理,在/etc/inittab文件中加入如下語句:vmtune:2:once:/usr/samples/kernel/vmtune -p 5 -P 10 -h 1

將文件型內存的范圍控制在5%-10%之間,當然具體多少自己決定

前提必須安裝vmtune軟件包:bos.adt.sample

#/> vmtune
vmtune:  current values:
  -p       -P        -r          -R         -f       -F       -N        -W
minperm  maxperm  minpgahead maxpgahead  minfree  maxfree  pd_npages maxrandwrt
      0        0       2          8        120      128      65536        0

  -M      -w      -k      -c        -b         -B           -u        -l    -d
maxpin npswarn npskill numclust numfsbufs hd_pbuf_cnt lvm_bufcnt lrubucket defps
419418   16896    4224       1     186        256          9      131072     1

        -s              -n         -S         -L          -g           -h
sync_release_ilock  nokilluid  v_pinshm  lgpg_regions  lgpg_size  strict_maxperm
        0               0           0           0            0        0

    -t           -j              -J               -z
maxclient  j2_nPagesPer j2_maxRandomWrite  j2_nRandomCluster
 399344           32            0                  0

    -Z                  -q                    -Q                -y
j2_nBufferPer  j2_minPageReadAhead  j2_maxPageReadAhead   memory_affinity
      512              2                    8                 0

    -V                  -i
num_spec_dataseg  spec_dataseg_int
      0                512

number of valid memory pages = 524272   maxperm=NaNQ% of real memory
maximum pinable=80.0% of real memory    minperm=NaNQ% of real memory
number of file memory pages = 0 numperm=NaNQ% of real memory
number of compressed memory pages = 0   compressed=NaNQ% of real memory
number of client memory pages = 0       numclient=NaNQ% of real memory
# of remote pgs sched-pageout = 0       maxclient=INF% of real memory
#/> vmtune
vmtune:  current values:
  -p       -P        -r          -R         -f       -F       -N        -W
minperm  maxperm  minpgahead maxpgahead  minfree  maxfree  pd_npages maxrandwrt
  99836   399344       2          8        120      128      65536        0

  -M      -w      -k      -c        -b         -B           -u        -l    -d
maxpin npswarn npskill numclust numfsbufs hd_pbuf_cnt lvm_bufcnt lrubucket defps
419418   16896    4224       1     186        256          9      131072     1

        -s              -n         -S         -L          -g           -h
sync_release_ilock  nokilluid  v_pinshm  lgpg_regions  lgpg_size  strict_maxperm
        0               0           0           0            0        0

        -v              -m             -C      
tuned_num_frs_memp  tuned_nummemp  page_color 
      2               0               0    

    -t           -j              -J               -z      
maxclient  j2_nPagesPer j2_maxRandomWrite  j2_nRandomCluster
 399344           32            0                  0

    -Z                  -q                    -Q                -y
j2_nBufferPer  j2_minPageReadAhead  j2_maxPageReadAhead   memory_affinity
      512              2                    8                 0

    -V                  -i               -e                  -E
num_spec_dataseg  spec_dataseg_int jfs_clread_enabled  jfs_use_read_lock
      0                512                0                   1

   -H             -I               -G
pgs_thresh  lru_poll_interval  lru_file_repage
      0               0                      1

PTA balance threshold percentage = 50.000000%

number of valid memory pages = 524272   maxperm=79.8% of real memory
maximum pinable=80.0% of real memory    minperm=20.0% of real memory
number of file memory pages = 27585     numperm=5.5% of real memory
number of compressed memory pages = 0   compressed=0.0% of real memory
number of client memory pages = 0       numclient=0.0% of real memory
# of remote pgs sched-pageout = 0       maxclient=79.8% of real memory

#/> schedtune

     THRASH           SUSP       FORK             SCHED
-h    -p    -m      -w    -e      -f       -d       -r        -t       -s
SYS  PROC  MULTI   WAIT  GRACE   TICKS   SCHED_D  SCHED_R  TIMESLICE MAXSPIN
 0   4     2        1      2      10       16       16         1        16384

   CLOCK   SCHED_FIFO2  IDLE MIGRATION  FIXED_PRI  TICK_SIZE  FORCE_GRQ
   -c          -a           -b             -F         -L         -G
%usDELTA   AFFINITY_LIM  BARRIER/16      GLOBAL(1)
  100           7            4              0          1          0

#/>


段是一組頁面,用來報告內存消耗的基本對象。因此 svmon 所報告的統計信息是以頁面表示的。一頁是 4K 的虛擬內存塊,而一幀是 4K 的實內存塊。除非另有注釋,否則所有的統計信息以 4096 字節的內存頁面為單位。


段屬于以下五種類型之一:
持久 用于處理文件和目錄的段。
工作 用于實現進程的數據區域的段和共享內存段。
客戶 用于實現諸如網絡文件系統(NFS)和 CD-ROM 文件系統等虛擬文件系統的段。
映射 用于實現內存文件的映射的段。
實內存映射 用于從虛擬地址空間存取 IO 空間的段。
A segment belongs to one of the five following types:
persistent Segments used to manipulate files and directories
working Segments used to implement the data areas of processes and shared memory segments
client Segments used to implement some virtual file systems like Network File System (NFS) and the CD-ROM file system
mapping Segments used to implement the mapping of files in memory
real memory mapping Segments used to aclearcase/" target="_blank" >ccess the IO space from the virtual address space.
段(segment)是一組頁的合集,每個段為256M,而每頁為4KB字節的虛存,每幀為4KB字節的實存,每個段可同時被多個進程使用,每個段屬于以下五種類型其中的一種:
persistent:存放JFS文件或目錄
working:進程數據區域和共享內存段
client:用于實現虛擬文件系統如NFS,CD-ROM文件系統和JFS2
mapping:用于實現文件和內存之間的映射關系
real memory mapping:用于對I/O空間的訪問
注意,在段的描述中,如果paging space使用的節中如果有一橫(-),表明該段未使用交換區,work段可能使用交換區,但persistent段和client段不會使用交換區。

vmtune -t 25 ; vmtune -p 10 ; vmtune -P 30
vmtune -t 157280 ; vmtune -p 52428 ; vmtune -P 157280
52427.2 157281.6


vmtune -t 25 -p 10 -P 30


挪用(頁面幀)(steal(a page frame))
(“虛擬內存管理器”進行的)重新分配實內存頁面幀的行為,此幀包含正由當前的執行程序使用的虛擬內存頁面。
Vmtune
-p minperm / maxperm –P
-f minfree / maxfree –F
One time command
If pages on free list < minfree, then steal pages, until pages on free list >= maxfree
If file pages in memory < minperm, then steal computational or file pages, equally
If file pages in memory > maxperm, then steal file pages, only
If file maxperm > pages in memory > minperm, then steal pages by repaging rates
Between the two, the VMM normally steals only file pages, but if the repage rate for file pages is higher than the repage rate for computational pages, computational pages are stolen as well.

缺頁故障(page fault)
(1) 當活動頁面引用不在內存中的頁面時發生的程序中斷。
(2) 當處理器試圖訪問不在實際內存中的虛擬內存頁是發生的中斷。

頁幀(page frame)
(1) 在實存儲容量中,有頁面大小的存儲位置。
(2) 主存儲器的一個區域包含一個頁面。
(3) 用來保留虛擬內存頁的在實際內存中的連續的 4096 字節部分。

頁(page)
(1) 指令、數據、或兩者的塊。
(2) 可被放進窗口的行數。
(3) 在虛擬存儲系統中,為有虛擬地址的并被作為一個單元在實存儲容量和輔助存儲間傳輸的固定長度的塊。
(4) 虛擬內存段的連續的 4096 字節部分。從段開始的每個頁面的偏移量為完整的 4096 的倍數。另見 葉(leaf)。

程序堆棧(program stack)
調用堆棧(invocation stack)的同義詞。
調用堆棧(invocation stack)
鏈接在一起的程序列表,作為在相同的作業中程序調用其它程序的結果。與程序堆棧(program stack)同義。

堆棧(stack)
(1) 存儲器中的一個區域,它存儲臨時的寄存器信息并返回子例程的地址。
(2) 一個構造后并維護的列表,這樣存儲的最后一個數據元素就是檢索的第一個數據元素。
(3) 內核方式中,和用戶進程一起調頁的區域。內核為每個進程保留一個堆棧。它保存進程信息,比如調用鏈和內核用于用戶進程的本地變量。
堆(heap)
動態分配變量的集合。


共享內存標識(shared memory ID,shmid)
指定給用于某個特定進程內的共享段的標識。另見文件描述符(file descriptor)。
共享內存(shared memory)
可以同時被一個以上的協同進程訪問的內存區域。

一個由c/C++編譯的程序占用的內存分為以下幾個部分
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。
3、全局區(靜態區)(static)—,全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放
4、文字常量區 —常量字符串就是放在這里的。 程序結束后由系統釋放
5、程序代碼區—存放函數體的二進制代碼。

stack:
由系統自動分配。 例如,聲明在函數中一個局部變量 int b; 系統自動在棧中為b開辟空間
heap:
需要程序員自己申請,并指明大小,在c中malloc函數
如p1 = (char *)malloc(10);
在C++中用new運算符
如p2 = (char *)malloc(10);
但是注意p1、p2本身是在棧中的。


========================================================
email: beginner@yeah.net
website: http://blog.chinaunix.net/index.php?blogId=739
========================================================

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97