操作系统参数检查及监控优化

目录

操作系统配置性能操作说明...1

第一章        硬件及操作系统信息... 4

1      Linux操作系统... 4

2      AIX操作系统... 7

3      HP-UX操作系统... 10

4      Solaris操作系统... 13

第二章        操作系统参数检查及修改... 16

1      查看操作系统参数... 16

2      修改操作系统参数... 22

第三章        操作系统监控及性能... 26

1      Linux操作系统性能查看... 26

2      AIX操作系统... 29

3      HP-UX操作系统性能查看... 35

4      Solaris操作系统性能查看... 38

第四章        应用跟踪和调试... 41

1      动态库... 41

2      跟踪调试... 41

2.1       strace命令... 41

2.2       查看进程所占的内存... 43

2.3       kill-3(java)43

第五章        第三方工具... 44

1      nmon. 44

1        Linux操作系统

1.1     CPU

查看CPU详细信息

cat /proc/cpuinfo

查看系统总共有多少个核:

cat /proc/cpuinfo |grep processor |wc -l 

查看物理CPU的个数

#cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

查看CPU是几核

#cat /proc/cpuinfo |grep "cores"|uniq

tong@linux-kvm:~> cat /proc/cpuinfo |grep "cores"|uniq

cpu cores       : 6

1.2     内存

cat  /proc/meminfo

如下所示:

$  cat /proc/meminfo    

MemTotal:       132160492 kB

MemFree:        126791272 kB

Buffers:             796 kB

Cached:          2677704 kB

SwapCached:            0 kB

Active:          1332488 kB

Inactive:        1429500 kB

Active(anon):      84436 kB

Inactive(anon):        0 kB

Active(file):    1248052 kB

Inactive(file):  1429500 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:       8385920 kB

SwapFree:        8385920 kB

Dirty:                 0 kB

Writeback:             0 kB

AnonPages:         83612 kB

Mapped:            29556 kB

Shmem:               948 kB

Slab:            2341112 kB

SReclaimable:     186648 kB

SUnreclaim:      2154464 kB

KernelStack:        6880 kB

PageTables:         7472 kB

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:    74466164 kB

Committed_AS:     231076 kB

VmallocTotal:   34359738367 kB

VmallocUsed:      238160 kB

VmallocChunk:   34241442428 kB

HardwareCorrupted:     0 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

DirectMap4k:        8192 kB

DirectMap2M:     4182016 kB

DirectMap1G:    130023424 kB

 

从上面信息可以查看出系统内存总共:132G,当前空闲内存大小:126G。其它的各项占用内存可以从上述信息中查出。

1.3     磁盘空间

在Linux系统中可以使用df –m来查看当前操作系统中空间使用的和空闲的大小,单位为Mbytes,如下所示:

linux-kvm:~ # df -m

Filesystem           1M-blocks      Used Available Use% Mounted on

/dev/sda3              1131552    323568   807984  29% /

devtmpfs                 64532         1    64532   1% /dev

tmpfs                    64532         1    64532   1% /dev/shm

/dev/sda1                  289        35      240  13% /boot

1.4     网卡

查看网卡参数如IP,MTU,物理地址等,执行命令:/sbin/ifconfig

如下所示:

/sbin/ifconfig

eth0     Link encap:Ethernet  HWaddr00:E0:81:BA:56:02 

         inet addr:168.1.1.41 Bcast:168.1.255.255 Mask:255.255.0.0

         inet6 addr: fe80::2e0:81ff:feba:5602/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1

         RX packets:655672570 errors:168 dropped:332 overruns:0 frame:84

         TX packets:765855701 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:49837383616 (47528.6 Mb) TX bytes:172160611234 (164185.1 Mb)

 

lo       Link encap:Local Loopback 

         inet addr:127.0.0.1 Mask:255.0.0.0

         inet6 addr: ::1/128 Scope:Host

         UP LOOPBACK RUNNING MTU:16436  Metric:1

         RX packets:502 errors:0 dropped:0 overruns:0 frame:0

         TX packets:502 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:87168 (85.1 Kb)  TXbytes:87168 (85.1 Kb)

1.5     操作系统位数

在Linux系统中使用uname –a来查看操作系统位数。一般64的系统都会带有X86_64,IA64等,而32位的都不带,一般是i386或者i686等,如果显示:AMD-64或者X86_64表示Intel64位,如果有IA64表示是安腾64.而显示i386,i686等信息,表示32位。如下所示:

uname -a

Linux rhas4 2.6.9-5.ELsmp#1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux

查看是哪个发行版本的命令:lsb_release–a

 

$lsb_release –a

LSB Version:    1.3

Distributor ID: RedHatEnterpriseAS

Description:    Red Hat Enterprise Linux AS release 4 (Nahant)

Release:        4

Codename:       Nahant

 

2        AIX操作系统

2.1     CPU

查看整个系统硬件信息包括CPU,内存等,都可以使用prtconf.

如下所示:

$ prtconf

System Model: IBM,8204-E8A

Machine Serial Number: 06815A2

Processor Type: PowerPC_POWER6

Processor Implementation Mode: POWER 6

Processor Version: PV_6

Number Of Processors: 4

Processor Clock Speed: 3503 MHz

CPU Type: 64-bit

Kernel Type: 64-bit

LPAR Info: 1 06-815A2

Memory Size: 7776 MB

Good Memory Size: 7776 MB

Platform Firmware level: Not Available

Firmware Version: IBM,EL320_076

Console Login: enable

Auto Restart: true

Full Core: false

 

Network Information

        Host Name: ibm113

        IP Address: 168.1.1.113

        Sub Netmask: 255.255.0.0

        Gateway: 168.1.1.1

        Name Server:

        Domain Name:

 

Paging Space Information

        Total Paging Space: 8192MB

        Percent Used: 37%

 

从上面的信息可以看,CPU是POWER6的,有4个CPU,频率是3503 MHz。还可以看出系统型号,机器序列号。系统内核:64位,CPU 64位。

或者执行下面的命令:

查看cpu个数:                            lsdev -C |grep proc

如下所示:

$ lsdev -C |grep proc

proc0      Available 00-00    Processor

proc2      Available 00-02    Processor

proc4      Available 00-04    Processor

proc6      Available 00-06    Processor

 

查看CPU的信息:                lsattr -El proc0

如下所示:

$ lsattr -El proc0

frequency   3503000000     Processor Speed       False

smt_enabled true           Processor SMT enabled False

smt_threads 2              Processor SMT threads False

state       enable         Processor state       False

type        PowerPC_POWER6 Processor type        False

2.2     内存

查看内存:                             lsattr-El mem0

如下所示:

$ lsattr -El mem0    

goodsize 7776 Amount of usable physical memory in Mbytes False

size     7776 Total amount of physical memory in Mbytes  False

2.3     磁盘

在AIX系统中可以使用df –G或者df -k来查看当前操作系统中空间使用的和空闲的大小,单位为Gbytes,如下所示:

$ df -g

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on

/dev/hd4           2.00      1.70   15%     9843     3% /

/dev/hd2          16.00     14.31   11%    40117     2% /usr

/dev/hd9var        8.00      7.98    1%      522     1% /var

/dev/hd3           8.00      6.46   20%      859     1% /tmp

/dev/fwdump        1.00      1.00    1%       14     1% /var/adm/ras/platform

/dev/hd1         150.00     62.72   59%  1108370     7% /home

/proc                 -         -    -         -     -  /proc

/dev/hd10opt      16.00     15.87    1%     1901     1% /opt

/dev/fhd         423.50    418.87    2%     9301     1% /fcom

 

 

2.4     网卡

使用ifconfig –a 来查看网卡的IP或使用lsattr -E -l en0来看网卡的详细信息。如下所示:

$ ifconfig -a

en0: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>

        inet 168.1.1.113 netmask 0xffff0000 broadcast 168.1.255.255

         tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0

lo0: flags=e08084b<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT>

        inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255

        inet6 ::1/0

         tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1

查看网卡详细信息:

$ lsattr -E -l en0

alias4                    IPv4 Alias including Subnet Mask           True

alias6                    IPv6 Alias including Prefix Length         True

arp           on          Address Resolution Protocol (ARP)          True

authority                 Authorized Users                           True

broadcast                 Broadcast Address                          True

mtu           1500        Maximum IP Packet Size for This Device     True

netaddr       168.1.1.113 Internet Address                           True

netaddr6                  IPv6 Internet Address                      True

netmask       255.255.0.0 Subnet Mask                                True

prefixlen                 Prefix Length for IPv6 Internet Address    True

remmtu        576         Maximum IP Packet Size for REMOTE Networks True

rfc1323                   Enable/Disable TCP RFC 1323 Window Scaling True

security      none        Security Level                             True

state         up          Current Interface Status                   True

tcp_mssdflt               Set TCP Maximum Segment Size               True

tcp_nodelay               Enable/Disable TCP_NODELAY Option          True

tcp_recvspace             Set Socket Buffer Space for Receiving      True

tcp_sendspace             Set Socket Buffer Space for Sending        True

 

2.5     操作系统位数

以root用户执行如下命令显示AIX系统内核是32位还是64位:

bootinfo -K

以root用户执行如下命令显示机器硬件是32位还是64位:

bootinfo -y

查看操作系统版本或者补丁包使用oslevel –r或者uname –a

如下所示:

$ oslevel -r

5300-06

使用uname来查看。

$ uname -a

AIX ibm113 3 5 000815A2D900

3        HP-UX操作系统

3.1     CPU

查看整个操作系统的信息包括硬件配置和操作系统的版本的命令:/usr/contrib/bin/machinfo

$ machinfo 

CPU info:

   Number of CPUs = 16

   Clock speed = 1598 MHz

   Bus speed   = 533 MT/s

   CPUID registers

      vendor information =       "GenuineIntel"

      processor serial number =  0x0000000000000000

      processor version info =   0x0000000020000704

         architecture revision:       0

         processor family:           32   Intel(R) Itanium 2 9000 series

         processor model:             0   Intel(R) Itanium 2 9000 series

         processor revision:          7   Stepping C2

         largest CPUID reg:           4

      processor capabilities =   0x0000000000000005

                      implements long branch:  1

        implements 16-byte atomic operations:  1

   Bus features

      implemented =  0xbdf0000020000000

      selected    =  0x0020000000000000

         Exclusive Bus Cache Line Replacement Enabled

Cache info (per core):

   L1 Instruction: size =   16 KB, associativity = 4

   L1 Data:        size =   16 KB, associativity = 4

   L2 Instruction: size = 1024 KB, associativity = 8

   L2 Data:        size =  256 KB, associativity = 8

   L3 Unified:     size = 9216 KB, associativity = 9

根据上述显示信息可以看出CPU是Intel(R) Itanium 2 系列的CPU,总共有16个CPU,每个CPU频率是:1598 MHz

3.2     内存

HP-UX查看内存的命令也是machinfo

$ machinfo 

Memory = 32637 MB (31.872070 GB)

3.3     磁盘

在HP-UX系统中使用df –k来查看磁盘空间使用情况

$ df -k

/home                  (/dev/vg00/lvol4       ) : 223857000 total allocated Kb

                                                  190162520 free allocated Kb

                                                  33694480 used allocated Kb

                                                        15 % allocation used

/opt                   (/dev/vg00/lvol5       ) :  8339144 total allocated Kb

                                                   6360824 free allocated Kb

                                                   1978320 used allocated Kb

                                                        23 % allocation used

/tmp                   (/dev/vg00/lvol6       ) : 10403928 total allocated Kb

                                                  10401208 free allocated Kb

                                                      2720 used allocated Kb

                                                         0 % allocation used

/usr                   (/dev/vg00/lvol7       ) : 20817520 total allocated Kb

                                                  19562640 free allocated Kb

                                                   1254880 used allocated Kb

                                                         6 % allocation used

/var                   (/dev/vg00/lvol8       ) :  8325664 total allocated Kb

                                                   8040408 free allocated Kb

                                                    285256 used allocated Kb

                                                         3 % allocation used

/stand                 (/dev/vg00/lvol1       ) :   913176 total allocated Kb

                                                    871016 free allocated Kb

                                                     42160 used allocated Kb

                                                         4 % allocation used

/                      (/dev/vg00/lvol3       ) : 10404512 total allocated Kb

                                                  10320424 free allocated Kb

                                                     84088 used allocated Kb

                                                         0 % allocation used

3.4     网卡

在HP-UX中使用netstat –ian 查看各个网卡的IP,MTU等参数。如下所示:

 

$ netstat -ian

Name           Mtu Network            Address               Ipkts      Opkts

lan0          1500 168.1.0.0          168.1.1.154           3389342    1219407

lo0           4136 127.0.0.0          127.0.0.1               67281      67281

直接使用ifconfig interface命令而没有加上任何参数。会显示当前有效网卡的名字,IP地址,子网掩码,广播地址和其它信息

如下所示:

$ /etc/ifconfig lan0

lan0: flags=843<UP,BROADCAST,RUNNING,MULTICAST>

        inet 168.1.1.154 netmask ffff0000 broadcast 168.1.255.255

3.5     操作系统位数

HP-UX查看操作系统是32位还是64位,使用如下命令:

getconf KERNEL_BITS

64表示内核是64位的,32表示内核是32位的

如下所示:

$ getconf  KERNEL_BITS

64

3.6     其它信息

执行machinfo还可以查看其它信息,例如Firmware,操作系统,机器序列号等如下所示:

$ machinfo 

Firmware info:

   Firmware revision = 7.44

   FP SWA driver revision: 1.18

   IPMI is supported on this system.

   ERROR: Unable to obtain manageability firmware revision info.

 

Platform info:

   model string =          "ia64 hp superdome server SD16B"

   machine id number =     428197a9-2d36-11dc-96bb-83601dd6ab6e

   machine serial number = SGH47230X2

OS info:

   sysname  = HP-UX

   nodename = hp_sd_i1

   release  = B.11.23

   version  = U (unlimited-user license)

   machine  = ia64

   idnumber = 1115789225

 

            

4        Solaris操作系统

4.1     CPU

Solaris查看整个操作系统的信息包括硬件配置和操作系统的版本的命令:prtdiag

如下所示,查看CPU信息:

以root用户执行prtdiag命令

# prtdiag

系统配置:  Sun Microsystems  sun4v Sun Fire T200

系统时钟频率:200 MHz

内存大小:8184 兆字节

================================ 虚拟 CPU ================================

CPU ID Frequency Implementation         Status

------ --------- ---------------------- -------

0      1000 MHz  SUNW,UltraSPARC-T1     on-line 

1      1000 MHz  SUNW,UltraSPARC-T1     on-line 

2      1000 MHz  SUNW,UltraSPARC-T1     on-line 

3      1000 MHz  SUNW,UltraSPARC-T1     on-line 

4      1000 MHz  SUNW,UltraSPARC-T1     on-line 

5      1000 MHz  SUNW,UltraSPARC-T1     on-line 

6      1000 MHz  SUNW,UltraSPARC-T1     on-line 

7      1000 MHz  SUNW,UltraSPARC-T1     on-line 

8      1000 MHz  SUNW,UltraSPARC-T1     on-line 

9      1000 MHz  SUNW,UltraSPARC-T1     on-line 

10     1000 MHz  SUNW,UltraSPARC-T1     on-line 

11     1000 MHz  SUNW,UltraSPARC-T1     on-line 

12     1000 MHz  SUNW,UltraSPARC-T1     on-line 

13     1000 MHz  SUNW,UltraSPARC-T1     on-line 

14     1000 MHz  SUNW,UltraSPARC-T1     on-line 

15     1000 MHz  SUNW,UltraSPARC-T1     on-line 

从上面的信息中可以看出系统内存为8184 兆字节,16个CPU,CPU类型为UltraSPARC-T1,频率为1000 MHz。

4.2     内存

内存信息见上面的命令,prtdiag

4.3     磁盘

在Solaris系统中查看磁盘空间的命令也是df –k

如下所示:

# df -k

文件系统              千字节    用了    可用 容量      挂接在

/dev/dsk/c0t0d0s0    7145357 6560717  513187    93%    /

/devices                   0       0       0     0%    /devices

ctfs                       0       0       0     0%    /system/contract

proc                       0       0       0     0%    /proc

mnttab                     0       0       0     0%    /etc/mnttab

swap                 5266920    1424 5265496     1%    /etc/svc/volatile

objfs                      0       0       0     0%    /system/object

sharefs                    0       0       0     0%    /etc/dfs/sharetab

/platform/SUNW,Sun-Fire-T200/lib/libc_psr/libc_psr_hwcap1.so.1

                     7145357 6560717  513187    93%    /platform/sun4v/lib/libc_psr.so.1

/platform/SUNW,Sun-Fire-T200/lib/sparcv9/libc_psr/libc_psr_hwcap1.so.1

                     7145357 6560717  513187    93%    /platform/sun4v/lib/sparcv9/libc_psr.so.1

fd                         0       0       0     0%    /dev/fd

swap                 5265584      88 5265496     1%    /tmp

swap                 5265536      40 5265496     1%    /var/run

/dev/dsk/c0t1d0s7    70223649 50909194 18612219    74%    /newhome

/dev/dsk/c0t0d0s7    54458966 50654961 3259416    94%    /export/home

4.4     网卡

使用ifconfig –a 来查看所有网卡的IP地址,MTU等信息。如下所示:

# ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1

        inet 127.0.0.1 netmask ff000000

e1000g0: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 index 2

        inet 168.1.1.122 netmask ffff0000 broadcast 168.1.255.255

        ether 0:21:28:14:8d:ce

4.5     操作系统位数

sun OS查看操作系统是32位还是64位,执行isainfo 命令:如下所示

$isainfo -bv

64表示内核是64位的,32表示内核是32位的

如下所示:

# isainfo -bv

64-bit sparcv9 applications

        asi_blk_init

查看操作系统版本使用uname –a

如下所示:

# uname -a

SunOS solaris10 5.10 Generic_139555-08 sun4v sparc SUNW,Sun-Fire-T200

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1        查看操作系统参数

1.1     Linux操作系统
1.1.1   查看用户参数限制

通常默认用户会对一些资源进行限制,防止用户过度的使用资源造成整个系统资源不够,但是在做一些压力测试时,这些默认的资源不足以完成压力测试,需要调整。那么就需要查看当前各个资源限制是多少。查看用户参数限制主要是使用ulimit –Ha来查看硬配置,ulimit –a查看所有配置。硬配置是个上限,超出上限的修改就会出不允许的操作这样的错误或者修改之后不起作用。如下图所示:

 

$ulimit -Ha

core file size          (blocks, -c) unlimited             core文件的最大值.

data seg size           (kbytes, -d) unlimited           数据段的最大值.单位:kbytes

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited            创建文件的最大值

pending signals                 (-i) 1032432          

max locked memory       (kbytes, -l) 256             在内存中锁定进程的最大值.单位:kbytes

 

max memory size         (kbytes, -m) unlimited    可以使用的常驻内存的最大值.单位:kbytes

open files                      (-n) 365535    可以同时打开的文件描述符的最大值

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200    管道缓冲区的最大值.单位:kbytes

real-time priority              (-r) 0

stack size              (kbytes, -s) unlimited     堆栈的最大值.单位:kbytes

cpu time               (seconds, -t) unlimited    CPU使用时间的最大上限

max user processes              (-u) 1032432

virtual memory          (kbytes, -v) unlimited    虚拟内存的最大值.单位:kbytes

file locks                      (-x) unlimited

通常需要设置的参数主要有:

打开文件数限制:主要是socket及文件句柄都使用这个参数。

用户堆栈限制 :应用程序使用的栈比较大的话,有可能会造成程序因为段错误而core掉。

Core文件大小: 通常需要跟踪程序提高此值。默认值为0,生不成core。程序core了之后就不会生成core文件。因此需要将此值调整为unlimited

1.1.2   IPC资源

RedHatAS 4.0 update 4的操作系统部署TLQ时,往往由于TongLINK/Q队列容量比较大,需要将的操作系统核心参数进行调整,否则可能会导致前置机上的TongLINK/Q启动失败故障。如不进行调整,TongLink.sys中会报错误信息“T_QueCreat:T_Mutex_Createerror”。

以root用户登录 使用/sbin/sysctl 检查、调整参数:

1.         

查看核心参数:

      sysctl  -a 

 

IPC资源参数说明:

shmmax - 共享内存段.

shmmin - 最小的共享内存段.

shmmni - 共享内存标志符的数量.

shmseg - 一个进程可分配的最大内存段数.

shmall - 最大可允许的内存数.

semmns - 信号量.

semmsl - 一个信号灯集中最大的信号量数.

共享内存

SHMMAX:单个共享内存段的最大字节数。

SHMSEG:每个进程可链接的最多共享内存段数

SHMALL:操作系统内全部共享内存的大小,应大于SHMMAX*SHMSEG。

消息队列

MSGTQL:一个队列中可存放消息的个数

MSGMAX:一个消息队列的最大字节数, 大于消息个数×一个消息的字节数。

MSGMNB:一个消息队列的最大字节数,大于消息个数*一个消息的字节数。

信号灯

SEMMNI:信号灯集的个数。

SEMMSL:每个信号灯集中信号灯的最大个数

SEMMNS:操作系统中信号灯的总数

 

共享内存

  以root用户执行如下命令:

    (1)检查共享内存的大小:

# sysctl -a|grep shm

kernel.shmmax = 1073741824  #查看此参数,如果比 1073741824 小,则调,否则不用调整

    调整命令: 

# sysctl -w kernel.shmmax=1073741824   root用户下执行,系统重启之后会恢复的原来的默认值。

kernel.shmmax = 1073741824  #要把此行内容加到/etc/sysctl.conf中以便每次机器起动都加载该参数,有的linux需要将这行内容加到/etc/rc.d/rc.local 文件末尾,这样可使永久生效。

信号量   

(2)检查信号量的大小:

# sysctl -a |grep sem

kernel.sem = 512        32000   32      1024   #查看各个值,如果其中有比这里的大则不用调整,如果哪个值小就调成相对应的值的大小

 

修改命令:

#sysctl -w kernel.sem="512 32000 32 1024"  以root用户执行如下,系统重启之后,就又会恢复的原来的默认值

kernel.sem = 512     32000   32    1024 #要把此行内容加到/etc/sysctl.conf(有的linux要放到/etc/rc.d/rc.local文件末尾)中以便每次机器起动都自动加载该参数

ulimit       

(3)检查tlq用户(以tlq为举例,代表TongLINK/Q启动用户)的ulimit中core和stack的设置:  

$su – tlq

$ulimit –a

core file size        (blocks, -c) unlimited

stack size            (kbytes, -s) unlimited

         如果上面的两项的结果不是unlimited,请执行以下命令:

$su – tlq

$ulimit -c unlimited

$ulimit -s unlimited

并且在tlq用户的根目录下的 .bashrc文件中添加如下命令:   

ulimit -c unlimited

ulimit -s unlimited

 

OpenFiles

    Linux系统上默认的open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。常见于高并发访问文件系统,多线程网络连接等场景。

下面以CentOS 5.6  linux为例:

(1)ulimit-HSn 102400     这只是在当前终端有效,退出之后,open files 又变为默认值。

(2)将ulimit-HSn 102400   写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile。

(3)令修改openfiles的数值永久生效,以root登录,修改配置文件: /etc/security/limits.conf. 在这个文件后加上,这种方法需要重启机器才能生效。

    *soft nofile 102400

    *hard nofile 102400

1.1.3   其它参数
1.1.3.1          TCP参数

常见的TCP参数有如下几个:

tcp_wmem(3个INTEGER变量): min, default, max

min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建立以后都可以使用它。默认值为4096(4K)。

default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。

max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,如果需要建议修改为51200  131072  204800)

查看方法:

执行sysctl –a |grep tcp_wmem

$/sbin/sysctl -a |grep tcp_wmem

net.ipv4.tcp_wmem = 4096        16384   131072

 

tcp_rmem (3个INTEGER变量): min, default, max

min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下tcp socket都至少会有这么多数量的内存用于接收缓冲,默认值为8K。

default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的net.core.wmem_default 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win=0默认值情况下,TCP窗口大小为65535。默认值为87380

max:用于TCP socket接收缓冲的内存最大值。该值不会影响 net.core.wmem_max,默认值为 128K。默认值为87380*2 bytes。(max的设置最好是default的两倍)

查看方法:

执行sysctl –a |grep tcp_rmem

$/sbin/sysctl -a |grep tcp_rmem

net.ipv4.tcp_rmem = 4096        87380   174760

 

tcp_mem(3个INTEGER变量):low,pressure, high

low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。(理想情况下,这个值应与指定给tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )

pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800* 300 / 4096)。 )

high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。我的网络里为192000 300000 732000)

查看方法:

执行sysctl –a |grep tcp_mem

$/sbin/sysctl -a |grep tcp_mem

net.ipv4.tcp_mem = 98304        131072  196608

1.1.3.2          并发线程数

Linux系统中最大并发线程数参数kernel.threads-max ,默认值为:32760

一般需要大量并发线程时,可以需要调整此值,否则会达到最大值时,就不能创建新的线程。

查看方法:

执行sysctl –a |grep kernel.threads-max

$/sbin/sysctl -a |grep kernel.threads-max

kernel.threads-max = 32760

1.1.3.3          系统最大pid值

Linux系统中最大PID 值kernel.pid_max,默认值为:32768。但是这个值在Linux系统中线程和进程都使用此值,当线程数+进程数达到此值时,就不能再创建进程或者线程,否则就会失败。系统错误号为    12     /* Out of memory */

查看当前值方法:

执行sysctl –a |grep kernel.pid_max

$/sbin/sysctl -a |grep kernel.pid_max

kernel.pid_max = 32768

 

1.2     AIX操作系统
1.2.1   查看用户参数限制

AIX操作系统中查看用户参数限制和Linux系统一样。具体查看方法请参考本文档的“2.1.1.1 查看用户参数限制”小节。

1.2.2   IPC资源

  AIX一般无需调整操作系统核心参数 ,如果运行后报共享内存或信号量不足,将maxuproc调大即可(用命令smitty system或chdev)。

  $su – root

  #chdev –l sys0 –a maxuproc=1000

AIX操作系统的IPC资源操作系统会根据maxuproc参数自动调整,此参数表示每个用户允许运行的最大进程数。

查看maxuproc参数的命令如下:

lsattr -E -lsys0 -a maxuproc

$ lsattr -E -l sys0 -a maxuproc

maxuproc    1200   Maximum number of PROCESSES allowed per user      True

 

 

如果一个用户下装了多个系统,都需要打开共享内存,需要打开的共享内存块过大。EXTSHM变量需要在共享内存创建之前设置,会影响shmat创建共享内存的行为,主要表现为后续再使用shmat去开发共享内存的时候,其内存映射机制就变化了。所以需要在TLQ用户设置,且需要在TLQ启动之前。

         在JAVA程序打开过多共享内存的场景中,需要开启AIX特殊的共享内存处理模式,且在创建阶段决定设置。故需要TLQ用户设置。

         exportEXTSHM = ON

 

1.3     HP-UX操作系统
1.3.1   查看用户参数限制

HP-UX操作系统中查看用户参数限制使用ulimit –a来查看。如下所示:

$$ ulimit -a

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         4194300

stack(kbytes)        392192

memory(kbytes)       unlimited

coredump(blocks)     unlimited

nofiles(descriptors)  8192

 

1.3.2   IPC资源及其它核心参数查

用root用户登陆,执行sam,出现图形界面

选择进入KernelConfiguration-> Kernel configuration -> Tunables来查看各个IPC资源参数。

如下图所示:

进入sam界面

进入Kernel Configuration界面

进入Tunables界面

另外其它核心参数也可以在此查看和修改。

1.4     Solaris操作系统
1.4.1   查看用户参数限制

HP-UX操作系统中查看用户参数限制使用ulimit –a来查看。如下所示:

$$ ulimit -a

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         4194300

stack(kbytes)        392192

memory(kbytes)       unlimited

coredump(blocks)     unlimited

nofiles(descriptors)  8192

 

 

2        修改操作系统参数

2.1     Linux操作系统
2.1.1  用户限制修改方法

修改/etc/security/limits.conf通过 vi /etc/security/limits.conf修改其内容,在文件最后加入(数值也可以自己定义):limits.conf中的内容格式如下:

<domain>        <type>  <item> <value>

domain为用户名,*为所有用户。

type取值只有soft 和hard值。soft的值只能是在hard的值之内取值。

item 为可以修改的项。

例如 nofile:最大打开文件数;core:最大core文件大小(单位KB);stack:用户栈大小值(单位KB);nproc(最大并发进程(线程)数。)

比如要修改tlq用户的最在打开文件数限制为65535,栈大小为10M,core文件大小不限制。那么就需要在limits.conf增加如下内容,然后tlq用户重新登陆就可以起作用了。

注意每项中需要使用(空格键分开,不能使用tab键)

tlq  soft  nofile   65535

tlq  hard  nofile   65535

 

tlq  soft  stack    10240

tlq  hard  stack    10240

 

tlq  soft   core    unlimited

tlq  hard  core    unlimited

 

2.1.2   调整IPC资源参数

共享内存

SHMMAX:单个共享内存段的最大字节数。

SHMSEG:每个进程可链接的最多共享内存段数

SHMALL:操作系统内全部共享内存的大小,应大于SHMMAX*SHMSEG。

以root用户用vi 修改/etc/sysctl.conf文件,增加如下一段:

kernel.shmmax = 4000000000

kernel.shmall = 1152921504606846720

kernel.shmmni = 4096

然后再运行sysctl -p/etc/sysctl.conf,即可起作用,不用重启系统。即使以后重启系统了,这个参数的修改值还会有效。

信号灯

SEMMNI:信号灯集的个数。

SEMMSL:每个信号灯集中信号灯的最大个数

SEMMNS:操作系统中信号灯的总数

以root用户用vi 修改/etc/sysctl.conf文件,增加如下一段:

kernel.sem = 8192       32000   8192    8192

然后再运行sysctl -p /etc/sysctl.conf,即可起作用。

消息队列

MSGTQL:一个队列中可存放消息的个数

MSGMAX:一个消息队列的最大字节数, 大于消息个数×一个消息的字节数。

MSGMNB:一个消息队列的最大字节数,大于消息个数*一个消息的字节数。

以root用户用vi 修改/etc/sysctl.conf文件,增加如下一段:

kernel.msgmax = 65536

kernel.msgmni = 32768

kernel.msgmnb = 65536

然后再运行sysctl -p /etc/sysctl.conf,即可起作用。

2.1.3   调整TCP参数

TCP调整参数主要有:tcp_wmem,tcp_rmem,tcp_mem其调整方法也是修改/etc/sysctl.conf文件,然后再加载参数。现在举例以tcp_wmem说明:

以root用户用vi 修改/etc/sysctl.conf文件,增加如下一段:

net.ipv4.tcp_wmem = 4096        16384   131072

然后再运行sysctl -p /etc/sysctl.conf,即可起作用。

其它几个参数tcp_rmem 以及tcp_mem类似。

2.1.4   调整系统最大并发进程/线程数

Linux系统中最大并发线程数为kernel.threads-max ,最大并发进程kernel.pid_max。由于线程的线程ID也是占用PID值,所以在大并发情况下的操作系统中,需要调整这两个值。其修改方法也是修改/etc/sysctl.conf。具体这两个参数的值,请根据实际情况修改。下面以threads-max为65530和pid_max为65535为例进行说明。

以root用户用vi 修改/etc/sysctl.conf文件,增加如下一段:

kernel.threads-max = 65530

kernel.pid_max = 65535

然后再运行sysctl -p /etc/sysctl.conf,即可起作用。

2.2     AIX操作系统
2.2.1   用户限制修改方法

AIX用户限制修改方法和Linux系统一样。请参考本文档的“2.2.1.1用户限制修改方法

2.2.2   调整IPC资源参数

AIX系统中如果报IPC    资源不够或者不能创建新进程,有可能是需要调整maxuproc,此参数指定每个用户标识的最大进程数目。此参数取值范围是:1 到 131072。更改会立即有效而且在引导期间保存下来。如果值减小了,那么它只有在系统引导后才有效。

修改命令:以root用户执行chdev -l sys0 -a maxuproc=NewValue

其中NewValue为新的值,一般会大于原来的值。

# chdev -l sys0 -a maxuproc=1200

2.3     HP-UX操作系统
2.3.1   用户限制修改方法

常用的HP-UX修改用户限制如调整打开文件数限制:nofiles;core大小coredump;栈大小:stack。那么修改方法如下:

打开文件数限制:   ulimit –n 65535

core大小:    ulimit –c unlimited

栈大小:ulimit –s 10240

根据需要修改其中的一项或者多项,将将这些命令加载到用户的.profile中,以便用户一登陆就会启作用。

2.3.2   调整IPC资源参数

1.用root用户登陆,执行sam,出现图形界面

2.选择进入Kernel Configuration-> Kernel configuration -> Tunables来查看并修改各个IPC资源参数。

3.修改完成后,选择reboot system 重启系统重新链接核心,使设置生效。

2.4     Solaris操作系统
2.4.1   用户限制修改方法

Solaris操作系统修改用户限制,目前常用的是使用ulimit 加相应的参数调整之后,再加到用户的.profile中。例如:

打开文件数限制:   ulimit –n 65535

core大小:    ulimit –c unlimited

栈大小:ulimit –s 10240

再将相应的命令加到用户的.profile中。

2.4.2   调整IPC资源参数

  修改Solaris里/etc/system,参考值如下所示:

  setsemsys:seminfo_semmni=20000

  setsemsys:seminfo_semmsl=29000

  setsemsys:seminfo_semmns=30000

  setsemsys:seminfo_semopm=31000

  setsemsys:seminfo_semmnu=32000

  setsemsys:seminfo_semume=10

  setsemsys:seminfo_semvmx=32767

   在修改任何内核参数之后,重新引导系统以使内核设置生效,重启之后可以用下面的命令查看是否起作用。

  sysdef | sed -n '/System Configuration/,$p'  

2.5     UnixWare

2.   

2.1.   

2.2.   

2.3.   

2.4.   

2.5.   

2.5.1.  调整IPC资源参数

  对UNIXWARE,以root登录,使用/etc/conf/bin/idtune命令调整此参数,调整完成后,重编译核心(/etc/conf/bin/idbuild -B),并重启(不能使用reboot,用init 6重启)。

修改共享内存:

  $su– root

 #idtune –f SHMMAX 134217728

  修改信号量:

  $su– root

  #vi/etc/conf/mtune.d/ipc

  找到“SEMMSL                150      25        300” 一行,将300改为600;

  找到“SEMMNS   60    60   300”一行,将最后的300改为80

 

1        Linux操作系统性能查看

1.1     Linux操作系统性判断标准

影响性能因素

评判标准

糟糕

CPU

user% + sys%< 70%

user% + sys%= 85%

user% + sys% >=90%

内存

Swap In(si)=0

Swap Out(so)=0

Per CPU with 10 page/s

More Swap In & Swap Out

磁盘

iowait % < 20%

iowait % =35%

iowait % >= 50%

其中:

%user:表示CPU处在用户模式下的时间百分比。

%sys:表示CPU处在系统模式下的时间百分比。

%iowait:表示CPU等待输入输出完成时间的百分比。

swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM

swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAPDISK

1.2     Linux系统性能分析工具

Vmstatsariostatnetstatfreepstop

1.1.1   用vmstat、sar、iostat检测是否是CPU瓶颈
1.1.1.1   利用vmstat命令监控系统CPU

该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU一个负载情况。

下面是vmstat命令在的输出结果:

 

[root@node1 ~]# vmstat 2 3

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0

0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0

0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0

lProcs

r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。

b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

lCpu

us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。

sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。

根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。

1.1.1.2   利用sar命令监控系统CPU

sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。sar不是每个系统都带的,有的可能需要格外安装。

下面是sar命令对某个系统的CPU统计输出:

[root@webserver ~]# sar -u 3 5

Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)

11:41:24 AM CPU %user %nice %system %iowait %steal %idle

11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83

11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50

11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92

11:41:36 AM all 90.08 0.00 0.13 0.16 0.00 9.63

11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41

Average: all 0.34 0.00 0.16 0.05 0.00 99.45

对上面每项的输出解释如下:

l%user列显示了用户进程消耗的CPU时间百分比。

l%nice列显示了运行正常进程所消耗的CPU时间百分比。

l%system列显示了系统进程消耗的CPU时间百分比。

l%iowait列显示了IO等待所占用的CPU时间百分比

l%steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作。

l%idle列显示了CPU处在空闲状态的时间百分比。

常见系统CPU整体利用率不高,而应用缓慢的现象的原因:

在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高,而应用缓慢现象的发生。

1.1.2   用free、vmstat检测是否是内存瓶颈
1.1.2.1   利用free指令监控内存

free是监控linux内存使用状况最常用的指令,看下面的一个输出:

[root@webserver ~]# free -m

total used free shared buffers cached

Mem: 8111 7185 926 0 243 6299

-/+ buffers/cache: 643 7468

Swap: 8189 0 8189

 

一般有这样一个经验公式:应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能,应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存,20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。

1.1.2.2   利用vmstat命令监控内存

[root@node1 ~]# vmstat 2 3

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0

0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0

0 0 0 162240 8304 67032 0 0 1 1 1009 18 0 1 99 0 0

 

lmemory

swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要siso的值长期为0,这种情况下一般不用担心,不会影响系统性能。

free列表示当前空闲的物理内存数量(以k为单位)

buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。

cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IObi比较小,说明文件系统效率比较好。

lswap

si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。

so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。

一般情况下,siso的值都为0,如果siso的值长期不为0,则表示系统内存不足。需要增加系统内存。

 

iostat检测是否是磁盘I/O瓶颈

用其它网络工具检测是否是网络带宽瓶颈

2        AIX操作系统

2      

2.1     AIX操作系统性判断标准

参见“Linux操作系统性判断标准”

2.2     AIX系统性能分析工具

AIX 操作系统常见的性能分析工具如:vmstatsariostatnetstatfreepstopas

具体每种性能分析工具用法及参数,参建“Linux系统性能分析工具

2.3     AIX系统topas分析工具

topas 命令报告选定的本地系统活动的统计信息,是AIX中常用的性能分析工具。

显示器左边的最上方两行显示了 topas 命令运行所在的系统的名称、上次查看的日期和时间以及监视时间间隔。
第二个固定部分占用了显示器的最右端的 25 个位置。它包含统计信息的 5 个子节,如下所示:

事件/队列

显示选定的系统全局事件的每秒频率、线程运行和等待队列的平均大小:

上下文切换:

在监视时间间隔内每秒上下文切换的数量。

系统调用:

在监视时间间隔内每秒执行的系统调用的总数。

读:

在监视时间间隔内每秒执行的 read 系统调用的数量。

写:

在监视时间间隔内每秒执行的 write 系统调用的数量。

派生:

在监视时间间隔内每秒执行的 fork 系统调用的数量。

执行:

在监视时间间隔内每秒执行的 exec 系统调用的数量。

运行队列:

准备运行但需要等待处理器可用的平均线程数目。

等待队列:

正在等待页面调度完成的平均线程数目。

文件/TTY

显示所选文件与 tty 统计信息的每秒频率。

读字符

在监视时间间隔内 read系统调用每秒读的字节数。

写字符

在监视时间间隔内 write 系统调用每秒写的字节数。

原始输入

在监视时间间隔内每秒从 TTY 中读取的原始字节数。

Tty 输出

在监视时间间隔内每秒写入 TTY 中的字节数。

Igets

在监视时间间隔内每秒调用索引节点查找例程的数量。

Namei

在监视时间间隔内每秒调用路径名查找例程的数量。

目录块

在监视时间间隔内被目录搜索例程每秒扫描的目录块数目。

页面调度

显示页面调度统计信息的每秒频率。

故障

在监视时间间隔内每秒缺页故障的总数。这包括不能激活页面调度的缺页故障。

占用

在监视时间间隔内每秒钟有物理内存 4K 帧被虚拟内存管理器占用。

调页空间输入

在监视时间间隔内每秒钟从调页空间读取 4K 页面的数量。

调页空间输出

在监视时间间隔内每秒钟将 4K 页面写到调页空间的数量。PageIn,PageOut如果这两个数值均大于三位数,并且长期大于这个数值,则会出现内存颠簸,导致系统响应性能变慢了。这个信息也可以用vmstat来看,pi和po列即与这里相对应。当然,如果只是有页面出,或者只有页面入,或者短时间的一些页面换入换出,则没有什么问题,关注一下即可。

页面调进

在监视时间间隔内每秒钟读取 4K 页面的数量。这包括与从文件系统读取有关的页面调度活动。从此值中减去 PgspIn就可得到在监视时间间隔内每秒钟从文件系统读取的 4K 页面的数量。

页面调出

在监视时间间隔内每秒钟写 4K 页面的数量。这包括与写入文件系统有关的页面调度活动。从此值中减去 PgspOut就可得到在监视时间间隔内每秒钟写入文件系统的 4K 页面的数量。

Sios

在监视时间间隔内虚拟内存管理器每秒钟发出的 I/O 请求的数目。

内存

显示实际内存大小与内存使用的分布情况。

实内存,MB

以 MB 为单位的实内存大小。

计算页面百分比

当前分配给计算页面帧的实际内存的百分比。计算页面帧通常是那些被调页空间支持的帧。

非计算页面百分比

当前分配给非计算页面帧的实际内存的百分比。非计算页面帧通常是那些被文件空间(可以是数据文件、可执行文件或共享库文件)支持的帧。

客户机百分比

当前被分配用来对远程安装的文件进行高速缓存的实内存的百分比

调页空间

显示调页空间的大小和使用率

大小,MB

系统上所有调页空间的总和,以 MB 为单位。

已使用百分比

当前正在使用的调页空间所占的总百分比。如果换页空间的使用率长期增长,就说明系统内存不足,已经开始使用磁盘空间来缓冲内存了,如果PG使用率持续增长,或者大于50%,需要警惕(到50%在监控平台已经是主要告警啦!),并马上提交系统管理员分析内存增长原因。如果该数值持续增长,系统一定会挂掉的!

空闲百分比

当前未使用的调页空间所占的总百分比。

NFS

显示每秒调用的 NFS 状态

  • 服务器 V2 calls/sec
  • 客户机 V2 calls/sec
  • 服务器 V3 calls/sec

客户机 V3 calls/sec

CPU 使用率

此子节显示一个条形图表来表示累积的 CPU 使用率。如果有多个 CPU,按 c键两次就可显示 CPU 列表。仅按 c键一次将会关闭此子节。以下字段通过两种格式显示:

用户百分比:这显示以用户方式执行的程序所使用的 CPU 的百分比。(缺省按用户百分比排序):这个为CPU使用率的关键数值。该使用率反映了用户在操作系统基础上运行的各种软件占用的CPU时间比率的总和。一般来说,如果User+Kernel连续大于70%,即可以认为系统可能存在CPU上的严重性能问题。

内核百分比:这显示以内核方式执行的程序所使用的 CPU 的百分比。操作系统作为基础软件,为应用程序支持和服务的同时,本身的运行也需要一定的CPU和内存。特别是内存资源,系统负载越重,相应的内核占用的CPU和内存资源也会越多。一般来说,内核占用的CPU时间不会太多的。一般小于应用的CPU使用率。

等待百分比:这显示用于等待 IO 的时间的百分比。CPU的等待一般都为等待IO的响应,众所周知,目前计算机的主要瓶颈都在IO。应用程序执行的时候,需要读写磁盘等外部存储的数据,进程就会发起IO请 求后等待IO完成。这个等待的过程占用CPU时间就是wait。当这个值很高的时候,就说明IO来不及响应很多的IO请求,这个时候,就只能从IO层面想 办法优化了。

空闲百分比:这表示 CPU 空闲时间的百分比。CPU占用率出问题的主要可能原因:数据库服务器执行某一个SQL或者存储过程需要大量的运算(一般为软件设计不合理)。或者应用程序中存在异常的地方,比如死循环,或者其他写程序时的逻辑错误导致。一般程序出错会导致一个CPU被全部占用,比如上述的20%占用的原因就是一个交易程序长期占用一个CPU全部时间片。

当此子节首先显示热 CPU 列表时,就按用户百分比字段来对列表排序。但是,可以按其它字段来对列表排序,只要将光标移到期望栏的顶部就可以了。

网络接口

此子节显示了热网络接口的列表。所显示接口的最大数目是正在受监视的热接口数目,如 -n标志指定的那样。如果其它子节也正在被显示,则将显示接口的一个较小数目。按n键可关闭此子节。再次按 n键显示一行所有网络接口活动的报告摘要。两个报告都显示以下字段:

接口:网络接口的名称。
千位/秒:在监视时间间隔内每秒钟以 MB 为单位的总吞吐量。该字段是每秒接收到的千字节和发送的千字节的总和。
输入包:在监视时间间隔内每秒钟接收到的数据包的数目。
输出包:在监视时间间隔内每秒钟发送的数据包的数目。
输入千字:在监视时间间隔内每秒钟接收到的千字节的数目。
输出千字节:在监视时间间隔内每秒钟发送的千字节的数目。

当此子节首先显示热网络接口列表时,按 KBPS 字段对列表排序。但是,可以按其它字段对列表排序,只要将光标移到期望栏的顶部就可以了。排序仅对最多 16 个网络适配器有效。

当我们发现网络拥堵时(出现网卡传输失效的报错,即网卡发送数据包失败。或者网络响应明显变慢的时候,如果CPU没有问题,那么请检查网络流量)发现某一个网卡的KBPS持续大于四位数,甚至五位数时(这个值要是网卡千兆还是百兆而定)。就要看看这个网卡是什么网卡,在处理什么业务了。在命令行执行netstat –in 查看对应en*接口的ip地址,通过ip地址看看是带官网卡还是生产服务网卡流量高。然后通过netstat –v en* 看看网卡的详细工作状态,出现了多少错包,冲突包,crc校验错或者网络重置过等信息。上述信息请详细看netstat –v en*的输出.如果出现大量crc,错包的话,可能网线有问题或者接触不良。

如果上述均正常,而网络反应慢,则有可能是交换机拥堵。

磁盘

物理磁盘此子节显示热物理磁盘列表。所显示物理磁盘的最大数目是正受监视的热物理磁盘数目,正如 -d标志指定的那样。如果其它子节也正在被显示,则将显示物理磁盘的一个较小数目。按d键可关闭此子节。再次按 d键显示一行所有物理磁盘活动的报告摘要。两个报告都显示以下字段:

物理磁盘的名称。

忙碌百分比:表示物理磁盘活动时间的百分比(驱动器带宽使用率)。Disk Busy%磁盘繁忙的百分比,即磁盘能满足的最大IOPS(每秒IO操作数)和当前IO数量的比率。一般主要看磁盘的Busy%,当磁盘的Busy%持续大于85%时,即认为磁盘相当繁忙,已经可能要出问题了。当然,自己知道已经确定要产生大量IO操作的内容则不必在意,等其完成即可。出现问题的原因:应用服务器上面写日志进程或者查询日志的进程大量读写日志,导致磁盘繁忙率高,或者其他程序频繁读写磁盘导致。系统中hdisk0,hdisk1一般为系统盘,内置SCSI磁盘的相对IOPS是较低的。很容易满负荷运行。

千位/秒:在监视时间间隔内每秒钟读和写的千字节的数目。此字段是KB-Read和 KB-Writ的总和。

TPS:每秒钟向物理磁盘发出的传输数目。传输是对物理磁盘的 I/O 请求。多个逻辑请求可组合成对磁盘的单个 I/O 请求。传输大小不确定。

读取千字节:每秒钟从物理磁盘读取的千字节的数目。

写入千字节:每秒钟写到物理磁盘的千字节的数目。

当此子节首先显示热物理磁盘列表时,按KBPS 字段对列表排序。但是,可以按其它字段对列表排序,只要将光标移到期望栏的顶部就可以了。排序仅对最多 128 个物理磁盘有效。

进程

此子节显示热进程列表。所显示进程的最大数目是正在受监视的热过程数目,如 -p标志指定的那样。如果其它子节也正在被显示,则将显示进程的一个较小数目。按 p键可关闭此子节。按监视时间间隔内进程的 CPU 使用率来对进程排序。对于每一进程会显示以下字段:
名称:在进程中执行的可执行程序的名称。名称已被除去任何路径名和参数信息并被截断到 9 个字符的长度。

进程标识:进程的进程标识。

CPU 使用率百分比:在监视时间间隔内进程的平均 CPU 使用率。第一次显示进程时,此值表示整个进程生命期上的平均 CPU 使用率。

已使用调页空间:分配给此进程的调页空间的大小。这可被认为是进程覆盖区的一种表达,但并不包括用来保持可执行程序和它依赖的任何共享库的内存。

进程所有者(如果 WLM 部分被关闭):拥有此进程的用户的用户名。

工作负载管理(WLM)类(如果 WLM 部分被打开):进程所属的WLM 类。

在topas中,默认是列出占用cpu最高的前几个的进程信息供参考,如果前面第一区域的的CPU使用率持续高,就要看看这里是那个进程占用了大量的CPU资源,看看是哪个用户的进程,如果自己执行的,则杀掉或者找项目组解决即可。

常用用法

1、要每 5 秒显示最多 20 个“热”磁盘而省略网络接口、WLM 类和进程信息,请输入:
#topas -i5 -n0 -p0 -w0

2、要显示 5 个最活跃的进程和最多 20 个最活跃的 WLM 类(省略 -w 标志时此为缺省值),而不显示网络或磁盘信息,请输入:

#topas -p5 -n0 -d0

3、要使用缺省选项运行程序,请输入:

#topas

4、要直接进入进程显示,请输入:

#topas –P

5、要直接进入 WLM 类显示,请输入:

#topas -W

 

3        HP-UX操作系统性能查看

3.1     HP-UX操作系统性判断标准

HP-UX操作系统性能判断标准化,参见“Linux操作系统性判断标准”

3.2     HP-UX操作系统性能分析工具

HP-UX操作系统常见性分析工具如:vmstatsariostatnetstatfreepsglance

具体每种性能分析工具用法及参数,参建“ Linux系统性能分析工具

3.3     glance 性能分析工具说明

Glance监控工具是HP-UX系统中一个强大且易用的在线监控工具,它有两种版本,一种是gpm,图形模式,另一个就是glance,文本模式。几乎可以在任何终端和工作站上使用,占用资源很少。任何一个版本都可以提供丰富的系统性能信息。默认的进程列表会列出有关系统资源和活动进程的常规信息,更多详细信息包括:CPU,Memory, Disk IO, Network, NFS, System Calls, Swap, and System Table。

进入glance监控主界面后,按以下键就会进入相应的子界面,按“?”键它会列出如下的命令让你选择

-command选项列表

Command Screen Displayed / Descrīption

a CPU By Processor

c CPU Report

d Disk Report

g Process List

i IO By File System

l Network By Interface

m Memory Report

n NFS By System

t System Tables Report

u IO By Disk //* 如果有磁盘I/O瓶颈的时候,用这个命令可以查看具体每个盘的I/O消耗

v IO By Logical Volume //* 如果有磁盘I/O瓶颈的时候,用这个命令可以查看每个逻辑卷的I/O消耗

w Swap Space

A Application List

B Global Waits

D DCE Global Activity

G Process Threads

H Alarm History // * 进入性能瓶颈警报界面,进入后,可以看到磁盘瓶颈、网络瓶颈、CPU瓶颈等等

I Thread Resource

J Thread Wait

K DCE Process List

N NFS Global Activity

P PRM Group List

T Transaction Tracker

Y Global System Calls

Z Global Threads

? Commands菜单

glance运行时的键盘命令

S 选择 system/Disk/Application/Trans/Thread

s 选择查看进程

F 进程打开的文件

L 进程系统调用

M 进程内存

R 进程资源

W 进程等待状态

屏幕显示控制命令

b 下一页

f 前一页

h 在线帮助

j 调节屏幕刷新间隔

o 调整进程阈值

p 输出打印终止

e/q 退出glance

r 刷新当前屏幕

y 重新设置进程的nice值

z 将统计信息清零

>; 显示下一屏幕

 

屏幕显示说明在文本模式中使用glance,启动后,会出现下面的屏幕:

ProcList CPU Rpt Mem Rpt Disk Rpt NextKeys SlctProc HelpExit

B3692A GlancePlus C.03.71.00 14:08:08 hpdemo01 9000/800Current Avg Hig

-------------------------------------------------------------------------------

CPU Util |0% 0% 1%

Disk Util F |1% 1% 2%

Mem Util S SUUB B |22% 22% 22%

Swap Util U UR |7% 7% 7%

------------------------------------------------------------------------

PROCESS LIST Users= 2

User CPU Util Cum Disk Thd

Process Name PID PPID Pri Name ( 400% max) CPU IO RateRSS Cnt

------------------------------------------------------------------------

vxfsd 37 0 138 root 0.0/ 0.0 0.0 3.3/ 3.1 1.8mb 22


首行显示有关glance自身的信息和运行它的系统。后面则显示有关CPU、磁盘、内存和交换空间利用率的信息。下面分别介绍:

一. CPU利用率 显示CPU利用率的行以不同阴影的条形图开始。它被分为几部分来显示用于不同目的的CPU利用率。这个条形图的每一部分由一个字符开始并以字符结束,该字符显示了四种类型的信息
1. S部分显示了用于系统行为的CPU时间利用率的百分比
2. N部分显示了用于调整过的进程的CPU时间利用率。这些是运行在较低优先级上的进程
3. U部分显示了花费在用户进程上的时间的百分比
4. R部分显示了实时进程时间利用率的百分比行的最右部分显示了从启动glance开始到当前、平均和最高CPU利用率的百分比

二. 磁盘利用率 磁盘利用率条形图有两个部分。和CPU利用率条形图类似,以下这些部分显示了对于不同行为的磁盘利用率百分比
1. F部分显示了文件系统行为。这是用于文件读或写操作的磁盘I/O利用率
2. V部分显示了虚拟内存行为。如果这部分很大,它表示系统的物理内存很紧张在行的最右部分,显示了当前、平均和最高的磁盘利用率百分比

三. 内存利用率 在磁盘利用率条形图下面是内存利用率条形图。它分成三部分
1. S部分显示了用于系统进程的内存
2. U部分显示了用于用户程序的内存
3. B部分显示了用于缓冲存储器的内存行的最右部分显示了当前、平均和最高的利用率,它和CPU及磁盘利用率有同样的含义

四. 交换利用率 交换空间的利用条形图分成两个部分
1. U部分显示了在使用的交换空间

2. R部分显示了预留的交换空间。一旦进程被创建,在交换区中就有一个区域被预留下来,一个预留区不被使用五.进程列表屏幕下方是进程列表。这列没有列出所有的进程,只会显示那些正在使用系统资源的进程。各列分别是:
Process Name 创建进程的命令名

PID 进程ID

PPID 父进程的进程ID

Pri 进程的优先级。这是一个0到255的数字,数字越大,优先级越低

User Name 启动该进程的用户名

CPU Util 第一个数字是在上一个间隔时期内CPU的利用百分比。第二数是启动glance以来的CPU利用率百分比。缺省时,glance每5秒更新一次这个列表

Cum CPU 一个进程的累计CPU利用率

Disk IO Rate 第一个数字是上一个时间间隔的平均磁盘I/O速率。二个数字glance启动后平均的磁盘I/O速率

RSS 一个进程使用的RAM总量

Thd Cnt 线程统计

 

4        Solaris操作系统性能查看

4.1     Solaris操作系统性判断标准

参见“Linux操作系统性判断标准”

4.2     Solaris系统性能分析工具

Solaris操作系统常见的性能分析工具如:vmstatsariostatnetstatfreeps

具体每种性能分析工具用法及参数,参建“Linux系统性能分析工具

4.3     Solaris 常用工具ptstat

Solaris 中最重要、使用最广的实用工具是 prstat,它可查看系统占用了多少CPU 和内存,系统调用了哪些进程(或用户、 zone 、项目、任务)如下图所示:

退出prstat命令按q键。

prstat报告的内容

PID: 进程的PID号

USERNAME: 登陆用户名或者进程UID的所有者

SIZE :进程总体虚拟内存的大小

RSS: 进程驻留大小设置Kbyte Mbyte Gbyte。

STATE: cpu进程运行在那个CPU上。Sleep进程等待一个事件的完成。Run进程在运行队列中zombie进程停止但是父进程并不等待stop进程停止。

PRI: 进程的优先级

NICE: 计算优先级的数值

TIME: 进程累积运行时间

CPU: 进程最近占用CPU的百分比

PRCESS/NLWP: 进程名/在进程中的轻量进程号

可以使用priocntl命令来分配进程的优先级和管理进程的优先权。Nice命令只是支持和兼容以前的solaris OS版本。priocntl命令提供更加灵活的进程管理。

prstat的命令参数

-a 同一时间分开显示关于进程和用户的报告。如下图所示:

 

-n proc 限制输出的行数,如下图所示:

 

-ppidlist 在报告列表中只给出进程的PID。如下图所示:


1       动态库

         通常应用程序运行时,找不到动态库,环境变量又设置了,可以使用ldd 来查看应用程序使用的都是哪些动态库及动态库的路径。例如:

$ ldd msgcp

msgcp needs:

         /home/lyq/liuxin/TLQ8/lib/libtl_api.so

         /home/lyq/liuxin/TLQ8/lib/libtl_public.so

         /usr/lib/libpthread.a(shr_xpg5.o)

         /usr/lib/libc.a(shr.o)

         /usr/lib/librtl.a(shr.o)

         /usr/lib/libpthreads.a(shr_xpg5.o)

         /usr/lib/libpthreads.a(shr_comm.o)

         /unix

         /usr/lib/libcrypt.a(shr.o)

         例如:msgcp需要libtl_api.so动态库,并且默认连接的路径是/home/lyq/liuxin/TLQ8/lib

nm

2       跟踪调试

2.1     strace 命令

strace 命令是一种强大的工具, 能够显示任何由用户空间进程发出的系统调用. strace 显示这些调用的参数并返回符号形式的值. strace 从内核接收信息, 而且无需以任何特别的方式来构建内核. strace 的每一行输出包括系统调用名称, 然后是参数和返回值.

常用参数说明

-c 统计每一系统调用的所执行的时间,次数和出错的次数等.

-d 输出strace关于标准错误的调试信息.

-f 跟踪由fork调用所产生的子进程.

-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.

-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.

-i 输出系统调用的入口指针.

-t 在输出中的每一行前加上时间信息.

-tt 在输出中的每一行前加上时间信息,微秒级.

-ttt 微秒级输出,以秒了表示时间.

-T 显示每一调用所耗的时间.

-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.

-V 输出strace的版本信息.

-x 以十六进制形式输出非标准字符串.

-xx 所有字符串以十六进制形式输出.

-e expr 指定一个表达式,用来控制如何跟踪。

-o filename 将strace的输出写入文件filename

-p pid 跟踪指定的进程pid. 挂接指定进程并开始跟踪。跟踪可以随时通过键盘信号中止(CTRL-C),strace将脱离跟踪进程来回应。多个“-p”参数可以跟踪多个进程,最多可达32个。

2.1.1       查看进程在什么系统调用上消耗CPU:

  当通过性能工具查看到某个进程在某个CPU上占用率总是很高,但是又不知道这个进程什么操作会占用这么多的CPU,可以使用strace工具进行跟踪,来查出占用CPU的系统调用是什么,哪个调用是瓶颈。

使用的命令:strace -c  -p PID

如下所示:

$ strace -c -p 29082

Process 29082 attached - interrupt to quit

 

Process 29082 detached

% time     seconds  usecs/call     calls    errors syscall

------ ----------- ----------- --------- --------- ----------------

 88.64    0.000991         991         1           setup

  7.16    0.000080           5        16           kill

  1.70    0.000019           5         4           semop

  1.43    0.000016           4         4           rt_sigprocmask

  0.89    0.000010           5         2           rt_sigaction

  0.18    0.000002           2         1           nanosleep

------ ----------- ----------- --------- --------- ----------------

100.00    0.001118                    28           total

 

从上面可以看出,在PID为29082进程运行了0.001118秒,其中调用setup 991次,占总跟踪时间的88.64%,其次是kill,调用5次,占用跟踪时间的7.16%。

从这个可以看系统在运行的时候,调用setup比较多。

2.1.2       跟踪程序的运行过程。

使用命令:strace -Otest.txt 程序名。可以跟踪程序运行过程中调用的每个系统调用,及参数,返回值等.

2.2     查看进程所占的内存

pmap可以报告某个或多个进程的内存使用情况。使用pmap判断主机中哪个进程因占用过多内存导致内存瓶颈。测试过的环境(Linux,AIX,Solaris,HP-UX)

pmap <pid>

 

[liuxin@rhas4 TLQ8]$ pmap 29082

29082:   /home/liuxin/tlq/tlq8001/TLQ8/bin/tl_moni 0

0034b000     84K r-x--  /ld-2.3.4.so

00360000      4K r----  /ld-2.3.4.so

00361000      4K rw---  /ld-2.3.4.so

004b8000      8K r-x--  /libdl-2.3.4.so

004ba000      8K rw---  /libdl-2.3.4.so

08048000   1120K r-x--  /tl_moni

08160000   2236K rw---  /tl_moni

0838f000    432K rw---    [ anon ]

b752f000   1908K rw-s-    [ shmid=0x0 ]

b770c000   7536K rw-s-    [ shmid=0x8001 ]

b7e68000   1160K r-x--  /libc-2.3.4.so

b7f8a000      4K r----  /libc-2.3.4.so

b7f8b000     12K rw---  /libc-2.3.4.so

b7f8e000      8K rw---    [ anon ]

b7f90000     56K r-x--  /libpthread-0.10.so

b7f9e000      8K rw---  /libpthread-0.10.so

b7fa0000    268K rw---    [ anon ]

b7ffd000      4K r-x--  /libcwait.so

b7ffe000      4K rw---  /libcwait.so

bfff6000     40K rwx--    [ stack ]

ffffe000      4K -----    [ anon ]

 total    14908K

从上面可以看出进程29082所占的内存大小,以及各个动态库,共享内存大小,栈大小(stack)等情况。

2.3     kill -3(java)

针对多线程的JAVA程序,可以使用kill -3 java进程的PID,将JAVA进程的堆栈打出,检查当时运行的各个线程都是在执行什么方法,跟据这些判断JAVA程序运行情况以及瓶颈等。 

1       nmon

nmon 是IBM提供的运行于AIX/Linux平台的性能分析工具,可以在同一屏幕中输出CPU、内存、进程、网络、磁盘等各种性能数据。 支持pSeries® p5、x86、x86_64架构机型,能够运行在AIX和多种Linux发行版,二进制发布,无须编译安装,且操作非常方便。

运行界面如下:

  依次敲入c、m、t,就可以查看实时的CPU使用率、内存使用情况、进程状态三项信息,默认每2秒钟更新一次,按空格键可以手动更新。 如下图所示:

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值