2013-10-03

Allocate memory by Perl

仿效Java先allocate memory的作法可試著用Perl來做實驗, 作法如下:

#!/usr/bin/perl -w

for (0..10){
   my $buf = "A" x (1024 * 1024 * 100);
   print "Allocated " . length($buf) . " byte buffer\n";

}
print "Finished\n";
sleep(1000);

2013-09-16

透過HMC指令列出LPAR的資訊

hscroot@localhost:~> lssyscfg -r sys -F name
Server-9179-MHC-SN06394FR

hscroot@localhost:~> lssyscfg -m Server-9179-MHC-SN06394FR -r lpar -F name,lpar_id,state,rmc_ipaddr
TS1-1,16,Running,10.199.130.158
FGW2-1,15,Running,10.199.130.157
FGW1-1,14,Running,10.199.130.156
DEV1,13,Running,10.199.130.155
WORKING_LPAR,12,Running,10.199.130.154
NIM_Server,11,Running,10.199.130.153
DAP2-1,10,Running,10.199.130.51
DAP1-1,9,Running,10.199.130.1
DAR2-1,8,Running,10.199.130.136
DAR1-1,7,Running,10.199.130.131
LOG2,6,Running,10.199.130.122
LOG1,5,Running,10.199.130.121
MDS2,4,Running,10.199.130.112
MDS1,3,Running,10.199.130.111
VIOS2,2,Running,10.199.130.152

VIOS1,1,Running,10.199.130.151


Reference
1. http://www.aixhealthcheck.com/blog.php?id=227
2. http://santosh-aix.blogspot.tw/2008/06/creating-lpar-from-hmc-command-line.html

2013-08-06

ITM Agent change hostname

在TEP上,遇到Agent端的hostname有重複的時候,TEP管理的介面上會一直出現更新的訊息(圖1)。因此需要在Agent端做一些調整,方能解決問題。
(圖1)

On Linux/UNIX agent systems, these parameters can be added to the xx.ini file, where xx is the product code of the agent.

Example: edit the xx.ini file and add the following lines, where <your hostname> = the name you chose
to have displayed in the TEP navigator tree.
CTIRA_HOSTNAME=<your hostname>
CTIRA_SYSTEM_NAME=<your hostname>

After making the changes to the file and saving it, a restart of the agent is required.


For the Windows agents, you need to perform the following steps:

1) Stop the agent
2) In the TEP Managed System Status workspace, clear the offline entry for the agent
3) Ensure the corresponding navigator item has been removed
4) In the Manage Tivoli Enterprise Monitoring Services (MTEMS) GUI, right-click on the agent and select Advanced->Edit Variables...
5) Click on Add
6) For CTIRA_HOSTNAME, choose the variable from the list of selected variables
7) For the value, replace "%computername%" with the desired hostname, making sure to leave the remaining part of the value (typically .TYPE=REG_EXPAND_SZ) unchanged
8) For CTIRA_SYSTEM_NAME, type in the variable name and also the desired value
9) Select OK and start the Windows OS agent.

Alternative method: The following may be used to manually change the hostname on the Windows system:

1) Stop the agent
2) Clear the offline entry from Managed System Status workspace
3) Ensure the corresponding navigator item has been removed
4) Edit the <ITMHOME>\TMAITM6\kxxcma.ini file to include:
[Override Local Settings]
CTIRA_HOSTNAME=<hostname> .TYPE=REG_EXPAND_SZ
CTIRA_SYSTEM_NAME=<hostname>
where xx is the product code and <hostname> is the desired name to appear in the TEP
5) Reconfigure the agent through the MTEMS
6) Start the agent

Note that all agents running on a system must use the same values for both the CTIRA_HOSTNAME and CTIRA_SYSTEM_NAME parameters. If this construct is not followed, unpredictable results can occur. This applies to agents on all operating systems.

2013-08-01

AIX上壓縮檔處理方式

在AIX上最常見的壓縮檔就是.tar檔了順手整理了一些常見的壓縮檔格式:

.tar.Z file format
   壓縮
      # compress filename.tar
   解壓
      # zcat filename.tar.Z | tar -xvf -

.tar.gz file format
   壓縮
      # tar cvf - folder | gzip > filename.tar.gz
   解壓
      # gunzip -c filename.tar.gz | tar -xvf -

.gz file format (註1)
   解壓
      # gzip -d filename.gz
   壓縮
      # gzip -v filename

.tgz file format
   解壓
      # gzip -d filename.tgz | tar -xvf -

.zip file format (註2)
   解壓
      # unzip filename.zip


註1 : gzip 在壓縮完後,會建立一個 .gz 的檔,並清除原始未壓縮的檔。反之,解壓縮的時候,則是把 .gz 檔清除,只留解開後的檔。

註2 : 請注意,AIX預設並沒有裝unzip的程式。

2013-07-31

AIX增加Paging Space失敗時的檢查及處理流程

root@NIM_SERVER:/#lsps -a
Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type Chksum
hd6             hdisk0


root@NIM_SERVER:/#lslv hd6
LOGICAL VOLUME:     hd6                    VOLUME GROUP:   rootvg
LV IDENTIFIER:      00f7394f00004c000000013ae4b1d3cb.2 PERMISSION:     read/write
VG STATE:           active/complete        LV STATE:       opened/syncd
TYPE:               paging                 WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        128 megabyte(s)
COPIES:             2                      SCHED POLICY:   parallel
LPs:                44                     PPs:            90
STALE PPs:          0                      BB POLICY:      non-relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    32
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: off                                  
EACH LP COPY ON A SEPARATE PV ?: yes                                  
Serialize IO ?:     NO                                  
INFINITE RETRY:     no

root@NIM_SERVER:/#chps -s 1 hd6
0516-404 allocp: This system cannot fulfill the allocation request.
        There are not enough free partitions or not enough physical volumes 
        to keep strictness and satisfy allocation requests.  The command
        should be retried with different allocation characteristics.


root@NIM_SERVER:/#lspv
hdisk0          00f7394fe4b1d24f                    rootvg          active    
hdisk1          00f7394fe4b1d2e0                    rootvg          active


root@NIM_SERVER:/#lspv hdisk0
PHYSICAL VOLUME:    hdisk0                   VOLUME GROUP:     rootvg
PV IDENTIFIER:      00f7394fe4b1d24f VG IDENTIFIER     00f7394f00004c000000013ae4b1d3cb
PV STATE:           active                                  
STALE PARTITIONS:   0                        ALLOCATABLE:      yes
PP SIZE:            128 megabyte(s)          LOGICAL VOLUMES:  17
TOTAL PPs:          799 (102272 megabytes)   VG DESCRIPTORS:   2
FREE PPs:           0 (0 megabytes)          HOT SPARE:        no
USED PPs:           799 (102272 megabytes)   MAX REQUEST:      256 kilobytes
FREE DISTRIBUTION:  00..00..00..00..00                      
USED DISTRIBUTION:  160..160..159..160..160                  
MIRROR POOL:        None                                    
root@NIM_SERVER:/#r 0=1
lspv hdisk1
PHYSICAL VOLUME:    hdisk1                   VOLUME GROUP:     rootvg
PV IDENTIFIER:      00f7394fe4b1d2e0 VG IDENTIFIER     00f7394f00004c000000013ae4b1d3cb
PV STATE:           active                                  
STALE PARTITIONS:   0                        ALLOCATABLE:      yes
PP SIZE:            128 megabyte(s)          LOGICAL VOLUMES:  17
TOTAL PPs:          799 (102272 megabytes)   VG DESCRIPTORS:   1
FREE PPs:           228 (29184 megabytes)    HOT SPARE:        no
USED PPs:           571 (73088 megabytes)    MAX REQUEST:      256 kilobytes
FREE DISTRIBUTION:  00..00..00..68..160                      
USED DISTRIBUTION:  160..160..159..92..00                    
MIRROR POOL:        None


root@NIM_SERVER:/#smitty jfs2
調整hd6的空間, 將其空間縮小。


root@NIM_SERVER:/#lspv hdisk0
PHYSICAL VOLUME:    hdisk0                   VOLUME GROUP:     rootvg
PV IDENTIFIER:      00f7394fe4b1d24f VG IDENTIFIER     00f7394f00004c000000013ae4b1d3cb
PV STATE:           active                                  
STALE PARTITIONS:   0                        ALLOCATABLE:      yes
PP SIZE:            128 megabyte(s)          LOGICAL VOLUMES:  17
TOTAL PPs:          799 (102272 megabytes)   VG DESCRIPTORS:   2
FREE PPs:           34 (4352 megabytes)      HOT SPARE:        no
USED PPs:           765 (97920 megabytes)    MAX REQUEST:      256 kilobytes
FREE DISTRIBUTION:  00..00..00..00..34                      
USED DISTRIBUTION:  160..160..159..160..126                  
MIRROR POOL:        None


root@NIM_SERVER:/#chps -s 1 hd6


root@NIM_SERVER:/#lsps -a
Page Space      Physical Volume   Volume Group    Size %Used Active  Auto  Type Chksum
hd6             hdisk0            rootvg        5760MB     1   yes   yes    lv     0


root@NIM_SERVER:/#lslv hd6
LOGICAL VOLUME:     hd6                    VOLUME GROUP:   rootvg
LV IDENTIFIER:      00f7394f00004c000000013ae4b1d3cb.2 PERMISSION:     read/write
VG STATE:           active/complete        LV STATE:       opened/syncd
TYPE:               paging                 WRITE VERIFY:   off
MAX LPs:            512                    PP SIZE:        128 megabyte(s)
COPIES:             2                      SCHED POLICY:   parallel
LPs:                45                     PPs:            90
STALE PPs:          0                      BB POLICY:      non-relocatable
INTER-POLICY:       minimum                RELOCATABLE:    yes
INTRA-POLICY:       middle                 UPPER BOUND:    32
MOUNT POINT:        N/A                    LABEL:          None
MIRROR WRITE CONSISTENCY: off                                  
EACH LP COPY ON A SEPARATE PV ?: yes                                  
Serialize IO ?:     NO                                  
INFINITE RETRY:     no

2013-06-18

IBM DB2 管理

必要的授權角色

在 UNIX 上,執行此程序的使用者必須具有 root 專用權。而在 Windows 上,執行此程序的使用者必須具有 Administrators 群組的成員資格。還必須要有有效的使用者名稱和密碼,才能存取管理伺服器的必要資料庫。


開始之前

管理伺服器的資料庫必須使用 UTF8 編碼,才能處理非 ASCII 值 (例如中文字元)。

程序
這些程序會提供範例指令。實際指令和值也許會因您的環境而不同。

  1. 執行下列作業,讓 DB2 7.2 版能夠使用 IBM Tivoli Monitoring for Transaction Performance 所需的已更新 Java 功能:
    1. 停止 DB2 服務。
    2. 存取您的 DB2 安裝的 SQLLIB\java12 目錄。
    3. 執行程式,以更新 IBM DB2 7.2 版的 Java 功能:
      • 在 Windows 型環境中,執行 usejdbc2.bat 批次檔。
      • 在 UNIX 型環境中,執行 usejdbc2 Script。
    4. 重新啟動 DB2。
  2. 執行下列作業以建立資料庫:
    1. 在供管理伺服器使用的電腦上安裝 DB2 用戶端。
    2. 使用下列指令以建立資料庫:
      db2 "create database database_name"
      其中 database_name 是資料庫的名稱。
      範例:如果 db2Admin 是在管理伺服器上安裝 DB2 資料庫用戶端的 使用者名稱,您可以使用 db2Admin 來登入,並建立名為 itmtpDB 的資料庫 以支援管理儲存庫。
      db2 "create database itmtpDB"
      相關資訊:在與該用戶端關聯的「DB2 實例」下建立供管理伺服器使用的資料庫。 為了建立資料庫,您可以 DB2 實例的授權使用者來登入, 或以 DB2 用戶端以其身份而安裝的。安裝 DB2 用戶端的使用者能夠存取與用戶端有關聯的所有 DB2 實例。
    3. (僅限雙位元組字元環境):例如, 語言環境設為中文、韓文或日文的作業系統,需要雙位元組字集。如果您的作業系統啟用單位元組字集, 則不會自動接受雙位元組字集。您必須明確地啟用資料庫,以儲存含有雙位元組字元字串的監視資訊。下列建立資料庫的指令,會啟用雙位元組字集的儲存體:
      - DB2: CREATE DATABASE database_name USING CODESET UTF-8 TERRITORY US
  3. 執行下列作業,在 DB2 伺服器機器的作業系統上建立資料庫使用者。
    1. 直接在伺服器上,或從 DB2 用戶端中,建立資料庫使用者。
      相關資訊資料庫使用者一詞指的是管理伺服器用於存取支援管理儲存庫之 DB2 資料庫的系統使用者帳號。範例:如果 DB2 伺服器是安裝在 Windows 電腦上, 則您可以在該機器的 DOS 提示中輸入下列指令,建立管理伺服器可用於存取管理儲存庫的資料庫使用者帳戶。 此指令範例會建立一個名為 itmtp52 的使用者,其密碼為 TIMS。 (此密碼是第二個 itmtp52項目。)
      net user itmtp52 itmtp52 /add
  4. 執行下列作業,建立並實作緩衝池:
    註:
    DB2 的預設緩衝池和頁面大小,比使用管理儲存庫的應用程式所需的最佳效能還要小。 請使用大小至少為 250 的緩衝池。
    若要實作緩衝池,您必須中斷目前連接資料庫之所有應用程式的連線。
    1. 建立大型緩衝池,不使用作業系統分頁,將大小儘可能設為最大。
      相關資訊:例如,若要建立大小為 250、頁面大小為 32K 的緩衝池, 請在 DB2 中輸入下列指令:
      create bufferpool buffpool32k size 250 pagesize 32k
    2. 使用 APPLHEAPSZ 512 指令,更新 <database_name> 的資料庫配置。
    3. 輸入下列指令來檢視新緩衝池:
      select * from syscat.bufferpools
    4. 使用下列指令,列出目前連接至資料庫的所有應用程式:
      db2 list applications
      畫面會顯示類似以下的應用程式清單:
      Auth ID   Appl.  Appl.      Application ID            DB     #of
                Name   Handle                               Name  Agents
      --------  ----   ------  ---------------------------  ----  ------
      DB2INST1  java     14   *LOCAL.db2instl.000918161203  CSWA    1
      DB2INST1  java     15   *LOCAL.db2instl.000918161204  CSWA    1
    5. 關閉連接至資料庫的所有 連線,針對目前連接的每一個應用程 式,重複執行下列指令:
      db2 force application (applicationhandle)
      其中 applicationhandle 是列在應用程式清單之 Appl. Handle 直欄中的應用程式處理號碼 (請參閱步驟 4d)。
    6. 以下列其中一種方式重新連接至資料庫:
      • 如果您是以 DB2 實例的授權使用者 (資料庫以其身份而建立) 登入,請輸入類似下列的指令:
        db2 "connect to databasename"
        其中 databasename 是要供管理伺服器使用之資料庫的名稱。
        --或--
      • 如果您不是以 DB2 實例的授權使用者 (資料庫以其身份而建立) 登入,請輸入類似下列的指令:
        db2 "connect to databasename user InstUser using InstUserPasswd"
        其中:
        • databasename 是要供管理伺服器使用之資料庫的名稱。
        • InstUser 和 InstUserPasswd 是 DB2 實例之授權使用者(資料庫以其身份而建立) 的使用者 ID 和密碼。
        顯示的資訊與下面的類似:
        $db2 connect to cswa
        
        Database Connection Information
        Database server      = DB2/6000 7.1.0
        SQL authorization ID = DB2INST1
        Local database alias = CSWA
  5. 執行下列作業,建立表格空間:
    註:
    下列範例程序會建立一個新的表格空間,並將其與大小為 250、頁面大小為 32K 的緩衝池產生關聯。 您必須先建立好使用者表格空間,然後才能建立系統暫存表格空間。
    注意下列表格空間預估一個月的作業資料。不過,空間需求會視您的環境及您對產品的配置方式而有差異。
    1. 使用下列指令,捨棄預設的使用者表格空間 (userspace1):
      drop tablespace userspace1
    2. 輸入類似下列範例的指令,重建預設使用者表格空間:
      create tablespace userspace1 pagesize 32 k managed by system
      using ('/data2/tablespace1' 250)
      bufferpool bp32k
    3. 若要建立系統暫存表格空間,請輸入類似下列範例的指令:
      create temporary tablespace tempspace pagesize 32 k managed by system
      using ('/data2/temp32k')
      bufferpool bp32k
    4. 若要檢視變更,輸入下列指令:
      db2 list tablespaces show detail
  6. 使用下列指令,將許可權授與資料庫使用者 (管理伺服器用於存取資料庫的使用者帳戶):
    註:
    資料庫使用者必須有建立和編輯表格的權限。
    db2 "grant dbadm on database to user user"
    db2 "grant use of tablespace tablespace to user user"
    其中:
    • user 是資料庫使用者的使用者 ID
    • tablespace 是要為管理伺服器建立的表格空間名稱。
    相關資訊:這些指令會授與資料庫及表格空間的 DBADM 權限。 若要發出這些指令,您必須以獲得「DB2 實例」授權,並且用來建立資料庫的使用者登入。
    範例:若要建立資料庫使用者 itmtp52 以供管理伺服器使用 (如步驟 3 下的範例),並建立表格空間 userspace1 (如步驟 5 下的範例), 請使用下列指令,授與使用資料庫及表格空間的權限。
    db2 "grant dbadm on database to user itmtp52"
    db2 "grant use of tablespace userspace1 to user itmtp52"
  7. 選用) 您可以使用下列程序, 驗證 DB2 資料庫配置是否已最佳化。
    註:
    此範例程序會增加日誌優先項目的數目,然後開啟日誌保存功能,將配合 IBM Tivoli Monitoring for Transaction Performance 應用程式使用的資料庫配置最佳化。
    1. 輸入類似下列指令,以列出資料庫配置資訊:
      db2 "get db cfg for databasename"
    2. 輸入類似下列範例的指令,增加主要日誌的數量:
      db2 "update db cfg for databasename using logprimary number"
    3. 輸入類似下列指令,以開啟日誌保留功能:
      db2 "update db cfg for databasename using logretain on"
    4. 列出目前連接至資料庫的所有應用程式。請使用下列指令:
      db2 list applications
      畫面會顯示類似以下的應用程式清單:
      Auth ID   Appl.  Appl.      Application ID            DB     #of
                Name   Handle                               Name  Agents
      --------  ----   ------  ---------------------------  ----  ------
      DB2INST1  java     14   *LOCAL.db2instl.000918161203  CSWA    1
      DB2INST1  java     15   *LOCAL.db2instl.000918161204  CSWA    1
    5. 關閉所有到資料庫的連線。為目前已連接的每一個應用程式重複下列指令:
      db2 force application (applicationhandle)
      其中 applicationhandle 是列在應用程式清單之 Appl. Handle 直欄中的應用程式處理號碼 (請參閱步驟 7d)。
    6. 製作離線備份並套用 db 日誌到捲動轉遞。輸入與下列相類似的指令:
      db2 "backup db databasename to backupdirectory"
    7. 重複步驟 7d
  8. 執行下列作業,設定 DB2 用戶端連線:
    註:
    若 DB2 RDBMS 是安裝在與用戶端 (管理伺服器) 不同的機器上,您必須在用戶端機器上安 裝 DB2 Client Application Enabler,並設定至資料庫的連線。
    相關資訊:安裝及配置 DB2 Client Application Enabler 時,請遵循這些指引:
    • 請確定在系統上沒有安裝「DB2 用戶端應用程式啟用程式」(不論是完整或部份安裝)。若安裝已存在,請將它解除安裝。
    • 自訂選項以選取 Java Database Connectivity (JDBC)。JDBC 驅動程式被安裝成部份的「DB2 用戶端應用程式啟動程式」安裝環境。
    • 確定在選取的起始目錄中,有大約 2 MB 的可用空間以容納「DB2 用戶端應用程式啟用程式」。
    • (僅限 UNIX 型系統) 執行 db2profile 檔案 (適用於 Korn 或 Bourne Shell) 或 db2cshrc 檔案 (適用於 C Shell),以便能夠執行 DB2 指令及公用程式,例如 catalog 及 connect
      db2profile 和 db2cshrc 檔案位於 DB2 實例擁有者的起始目錄,該目錄在 sqllib 子目錄下面。 從每個需要使用 DB2 環境和工具的帳戶的 .profile 或 .cshrc 檔案取得適當檔案。
    • (僅限 AIX) 若要驗證 RDBMS 和 DB2 用戶端的設定,請確認下列環境變數已正確設定。(若您已取得 db2profile 或 db2cshrc 檔案,那麼這些變數是正確的。)
      • DB2DIR 必須指向到「DB2 用戶端應用程式啟動程式」安裝的目錄。
      • DB2INSTANCE 必須設為資料庫實例名稱。這會在資料庫安裝時設定。
    「DB2 用戶端應用程式啟動程式」安裝之後,必須設定到 RDBMS 伺服器和到資料庫的連通性。設定連通性的 DB2 指令是從用戶端系統所發出。即使 DB2 是在掌管管理伺服器的電腦上執行,您也必須執行這些指令。
    • 下列範例指令會將用戶端連接到稱為 ghost 的 RDBMS 伺服器,其具有節點名稱或別名 ims_db2 並使用埠 50000:
      db2 "catalog tcpip node ims_db2 remote ghost server 50000"
    • 下列範例指令會將用戶端連接到稱為 timsdev 的資料庫 (別名為 ims_dev), 此資料庫位於節點名稱或別名為 ims_db2 的伺服器上:
      db2 "catalog database timsdev as ims_dev at node ims_db2"
  9. 執行下列作業,提供額外共用記憶體區段供 AIX 上的 DB2 連線使用:
    註:
    根據預設值,AIX 並不允許 32 位元應用程式,在執行每個處理程序時,連接至超過 11 個的共用記憶體區段,而這其中本端 DB2 連線最多只能使用 10 個。請使用 EXTSHM (延伸共用記憶體) 功能,確保有足夠數量的共用記憶體區段可供 DB2 連線使用。EXTSHM 功能在 DB 7.2 版 (安裝 DB2 UDB 7.1 版 Fix Pack 3 的結果) 或更新版本的 DB2 裡都能使用。若您未提供足夠的共用記憶體區段數量,可能會看到下列錯誤訊息:
    SQL1224N  無法啟動一個資料庫代理站來為這個要求服務,
    或由於資料庫系統關閉或強制命令而導致資料庫代理站
    終止。SQLSTATE=55032
  10. 啟用 EXTSHM,指令如下:
    • 在 DB2 用戶端階段作業中:export EXTSHM=ON
    • 啟動 DB2 UDB 伺服器時:
      export EXTSHM=ON
      db2set DB2ENVLIST=EXTSHM
      db2start
    • 在 DB2 UDB EEE 上:
      EXTSHM=ON
      export EXTSHM
      您也要將這幾行新增到 sqllib/db2profile

2013-04-26

Export and Import ITM Situation

很感謝ITM官方文件有提到Situation該如何匯出和匯入,如下:
  • 匯出的方法
tacmd viewSit {-s|--situation} SITNAME
                              [{-e|--export} [FILENAME]]
  • 匯入的方法
tacmd createSit {-i|--import} filename
若我們欲匯出的項目僅一至兩個時,透過上述的方法真的很方便,但是當項目變多時,可能還是得透過一些Script來幫忙我們了。透過原廠文件上提到的tacmd listSit指令先將Situation匯出至文字檔,再來我們就可以運用簡易的Script去完成大量Situation的匯出和匯入了。


  • Situation的匯出


  • Situation的匯入



2013-03-27

記錄process list...PART1

蒐集系統上的process,目的是為了日後評估哪些process是系統和應用程式運行所必要的,今日先透過script來收集和統計process的清單。




##########################################################
## Target:                                            
## collect & filter uid, pid, ppid and cmd column
## from ps -ef result then export to record      
##                                                    
## Date:   2013/03/27                              
## Ver:    1.0                                        
## Author: Jammy Yu                                  
##########################################################

my $chk_time = `date +%Y%m%d`;
my @process = `ps -ef | grep -v UID`;

chomp($chk_time);

open(FHD, ">> /TWSE/process/process_$chk_time.log") || die "$!\n";

foreach (@process)
{
   chomp;
 
   ##     $1=UID  $2=PID $3=PPID                   $4=CMD
   $_ =~ /(\w+)\s+(\d+)\s+(\d+).+?[-|pts].+?:.+?\s+(.+)/;
 
   print FHD "$1,$2,$3,$4\n";
}

close(FHD);



open(LOG, " /TWSE/process/process_$chk_time.log") || die "$!\n";

my @cmd;
my %count;
while ( <LOG> )
{
   chomp;
   my($uid, $pid, $ppid, $cmd) = split(/\,/, $_);
   push(@cmd, $cmd);
}

foreach (@cmd)
{
   if (exists $count{$_})
   {
      $count{$_}++;
   }
   else
   {
      $count{$_} = 1;
   }
}

foreach (keys %count)
{
   print "$_ ---> $count{$_} time(s)\n";
}

close(LOG);

2013-03-26

透過背景模式進行ITM Agent安裝

先前安裝ITM Agent至90台LPAR時,若沒有善加運用背景執行程序的方法,當安裝1台需花費10分鐘的話,90台至少就要花費900分鐘!所以透過ssh中提供的f參數時,則可將程序丟到背景執行以達到同一時間並行運行安裝程序。


#!/usr/bin/ksh

for HOST in `cat /tmp/host.lst`;
do
   echo "$HOST start....."
   ssh -p 2222 -f $HOST '/tmp/agent_silent_install.pl'
 
   ExecStatus=$?
   if [ $ExecStatus -eq 0 ]; then
      echo "$HOST finish..." >> /tmp/itm.log
   else
      echo "$HOST fail..." >> /tmp/itm.log
   fi
done

2013-03-20

在AIX上移除^M字元

在Windows系統上,若將編輯後的文字檔上傳至AIX系統時,我們可能會發現文字檔案中的每一行皆會出現^M字元,經由同事告知解決的方式,當然要不吝嗇得分享給大家,作法有下列二種:
1.cat dosfile | col -b > unixfile

2.tr -d "\015\032" < dosfile > unixfile

2013-03-15

程序並行運行測試



配合測試需在觀察在同個時間點並行執行15個程序,且程序中皆須要有I/O的行為,原本想使用Perl的Thread Function,但其實shell就提供好用的pipe模式,下列三個情境可參考:

一、若程序相關,用管道便可以完成
cmd1 | cmd2 |...| cmdN

二、若完全無關聯,可以用job的方式
cmd1&; cmd2& ...& cmdN&

三、用script也可以,但下列的方式僅限於兩個!
perl -e 'fork() ? `cmd1` : `cmd2`'

而這次是採用第一個情境,並透過dd來產生1GB的檔案,產生檔名的方式是利用亂數來命名,簡易的Script如下所示:


#!/usr/bin/perl

my $rand=rand 3;
`dd if=/dev/zero of="$rand"_file_1GB bs=1m count=1k`;



當執行完成後,檔案名稱很幸運都沒有重複到