I am observing high load average on RHEL5 server and need to check the number of core processors available on the box to give me a bigger picture on whether or not I should be worried.
I have always checked the physical count quite simply.....
I'd grep for something a little less generic than 'processor'. That might turn up in a CPU name or something potentially. And pin it to the beginning of the line where it should always be found.
awk '/^cpu MHz/ { a++ } END { print a }' /proc/cpuinfo
It could mean one 8-core CPU, a pair of 4-core CPU's, four 2-core CPU's, or 8 1-core CPU's. Cores are counted individually. If you care which belongs in what chip, that's the physical ID.
If you just care about the number of cores, counting the line match like that will work fine.
In fact, you don't need to even match anything. Just count the number of records, splitting on blank lines, by setting RS to "". Then when awk runs out of input, print NR, the number of records. On my dual-core system:
Yip, simply looking for the number of cores which according to this is 8. Thing is though it does not correspond to what the hardware mgmt interface sayes?
# hpasmcli
HP management CLI for Linux (v2.0)
Copyright 2008 Hewlett-Packard Development Group, L.P.
hpasmcli> show server
System : ProLiant BL460c G6
Serial No. : GB8033X7FV
ROM version : I24 03/30/2010
iLo present : Yes
Embedded NICs : 2
NIC1 MAC: 78:e7:d1:65:3a:60
NIC2 MAC: 78:e7:d1:65:3a:64
Processor: 0
Name : Intel Xeon
Stepping : 5
Speed : 2933 MHz
Bus : 133 MHz
Core : 4
Thread : 8
Socket : 1
Level2 Cache : 1024 KBytes
Status : Ok
Processor total : 1
The reason for this is that while the CPU may have hyperthreading on it, you can always disable some CPU cores with the maxcpus=$NUM on the kernel line in grub.
This shell string will allow you to see how many physical CPU packages exist (physical ID), how many cores are active (counting core IDs in use) and how many cores each package provides (cpu cores).
Do not, however, pipe this to word count, as you will get an incorrect number unless you sort it uniquely or pass it to uniq.