Friday, September 14, 2007

Linux Admin Tool: Iostat

The iostat command at its most basic provides an overview of CPU and disk I/O statistics:

#iostat

iostat
Linux 2.4.21-32.ELsmp (dw1.corp.co.com) 03/30/2007
avg-cpu: %user %nice %sys %iowait %idle
4.10 0.01 1.26 4.69 89.94

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
cciss/c0d0 19.43 24.51 27.90 726081316 826335200
cciss/c0d0p1 16.75 17.37 110.99 514613362 3287372808
cciss/c0d0p2 2.57 6.44 60.75 190884490 1799215720
cciss/c0d0p3 0.10 0.69 1.17 20583160 34713968

Below the first line (which contains the system's kernel version and hostname, along with the current date), iostat displays an overview of the system's average CPU utilization since the last reboot. The CPU utilization report includes the following percentages:

· Percentage of time spent in user mode (running applications, etc.)
· Percentage of time spent in user mode (for processes that have altered their scheduling priority using nice(2))
· Percentage of time spent in kernel mode
· Percentage of time spent idle

Below the CPU utilization report is the device utilization report. This report contains one line for each active disk device on the system and includes the following information:

· The device specification, displayed as dev-sequence-number, where is the device's major number[1], and is a sequence number starting at zero.
· The number of transfers (or I/O operations) per second.
· The number of 512-byte blocks read per second.
· The number of 512-byte blocks written per second.
· The total number of 512-byte blocks read.
· The total number of 512-byte block written.

This is just a sample of the information that can be obtained using iostat. For more information, refer to the iostat(1) man page.


Thursday, August 16, 2007

Linux: vmstat

vmstat

Provides real-time reports on CPU consumption, CPU dispatcher run queue, RAM page in, scan rate, RAM page outs. Example:
#vmstat 2 5

procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 11160 327148 35036 3446588 0 1 1 0 0 0 0 0 0 1

Procs
r: The number of runnable processes waiting for access to the CPU.
b: The number of processes in uninterruptible sleep.

Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)

Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).

IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).

System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.

CPU
These are percentages of total CPU time.
us: The percentage of the time the CPU ran user-level code (non-kernel. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: The percentage of the time the CPU was idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero.


Wednesday, June 13, 2007

Ascential DataStage: Routine to Reset Sequnce Key

If you use the KeyMgtGetNextValue routine in your job to assign a sequence value for you key, and you want to set the key to a special value, there is no routine come with DataStage for you to reset the key. You need to create one for your own.




1. Login to your project from DataStage Manager.
2. Select File àNew Server Routine
3. From the SDK editor, select the General tab and do:
4. Give a routine name, for example: SetKeyValue, in the Routine name field.
5. Select Transformer Function from Type list.
6. Select or enter a Category in the Category field.
7. Enter a short and long descriptions as you wish
8. Select the Arguments Tab and enter two arguments
---- SeqKeyName this is the name associated with the sequence.
---- KeyValue. This is the value you want to set for your key.
9. Select the Code Tab and place the following codes in the code window.
Common /Sequences/ Initialized, NewVal, SeqFile
## open the SDKSequence file
Open "SDKSequences" TO SeqFile Else
EXECUTE "CREATE.FILE SDKSequences 2 1 1"
Open "SDKSequences" TO SeqFile
Else Call DSLogFatal('Unable to Open Sequence file','Reset Sequence Job')
End
## Write the new value to the file
NewVal = KeyValue
Writeu NewVal ON SeqFile,SeqKeyName
Else Call DSLogFatal('Unable to write New Value','Reset Sequence Job')
## return the values
Ans = NewVal
10. Select Compile from the bottom of the screen and make sure there is no error.
11. Select Test from the bottom of the screen and test the Routine. It should return the value of KeyValue.
12. To reset the key using the routine you just created, create a new job from the designer. In your job, user a transformer to trigger the routine.