вторник, 12 июля 2011 г.

Performance Monitoring on Solaris

Очень часто господа системные администраторы сталкиваются с проблемой просмотра загрузки операционной системы, и если большинству в общем то знакомы системы мониторинга на стандартных операционных системах, то в системе Solaris - это часто вызывает много вопросов и сомнений, особенно в выводах команд пугающих своими цифрами. Сегодня попробуем немного в этом разобраться.
Первоначально нас интересует три вопроса, рассмотрим их по порядку:
1. Что влияет на производительность системы?
  • Память 
  • Процессор
  • Диск
  • Сеть
2. Общие случаи возникновения проблем с производительностью
  • Недостаточные нагрузочные тесты производительности приводит к нерасчитанным нагрузкам на существующую систему
  • Появление недостатка системных ресурсов в результате увеличения нагрузки на существующее приложение
  • Проблемы программно-аппаратного комплекса
3. Какие концепции используются во время сбора данных?
Обязательно иметь два вида данных, первый собранный в момент когда система испытвает критические нагрузки, второй во время стабильного функционирования системы.
4. Ну и наконец какие же у нас есть средства в нашей системе, и за что они отвечают?
  • vmstat - память, процессор, I/O
  • mpstat - CPU
  • iostat - I/O
  • netstat - сеть
  • lockstat - системные вызовы, блокировки
  • sar - утилита многоплановая, все зависит от опций.
Постараюсь рассказать об этих и некоторых других утилитах, варианты выводов, и чтение этих выводов.
Анализируем использование памяти:
Первое, нам необходимо узнать сколько памяти занимается ядрос, а сколько пользователем, от этого будет зависить наши последующие шаги:
root@T1000-spare # echo "::memstat" | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                      54267               423    5%
Anon                        25457               198    3%
Exec and libs                4346                33    0%
Page cache                   9650                75    1%
Free (cachelist)            10775                84    1%
Free (freelist)            908455              7097   90%

Total                     1012950              7913
Physical                  1007634              7872

Использование памяти пользователя: показывает процессы использующие память больше всего: 
root@T1000-spare # prstat -s rss
PID  USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       
  1238 noaccess  155M  117M sleep   59    0   0:01:01 0.0% java/18
   662  root       18M   15M sleep   59    0   0:00:05 0.0% fmd/26
     7    root       16M   13M sleep   59    0   0:00:09 0.0% svc.startd/12
     9    root       12M   11M sleep   59    0   0:00:34 0.0% svc.configd/17
   697 root       10M 8304K sleep   59    0   0:00:00 0.0% snmpd/1
   489 root       50M 8048K sleep   59    0   0:00:00 0.0% gdm-binary/1
   446 root     9744K 6352K sleep   59    0   0:00:01 0.0% inetd/4
  1773 root     7464K 6152K sleep   59    0   0:00:00 0.0% sshd/1
   184 root     6704K 4728K sleep   59    0   0:00:00 0.0% nscd/31
   187 root     5536K 4720K sleep   59    0   0:00:00 0.0% picld/9
  1772 root     5680K 4312K sleep   59    0   0:00:00 0.0% sshd/1
   667 root     9608K 4184K sleep   59    0   0:00:00 0.0% sendmail/1
   142 root     6832K 3784K sleep   59    0   0:00:00 0.0% syseventd/15
   664 smmsp    9672K 3744K sleep   59    0   0:00:00 0.0% sendmail/1
   202 daemon   4984K 3728K sleep   59    0   0:00:00 0.0% kcfd/5
  2019 oracle   3880K 3600K cpu17   59    0   0:00:00 0.0% prstat/1
==================================================
Следующая команда показывает вывод общей памяти и "семафоров":
root@T1000-spare # ipcs -a (к сожалению данный сервер тестовый и только-только поднятый, нагрузку продемонстироровать не смогу)
Следующая команда продемонстрирует нам использование пользовательской памяти всеми процессами, исключая (PID 0,2,3):
root@T1000-spare # egrep "[0-9]:|^total" /var/tmp/pmap-x
1: /sbin/init
total Kb    3024    2712     312       -
1112: /usr/dt/bin/dtlogin -daemon
total Kb    6576    4536     304       -
1238: /usr/java/bin/java -server -Xmx128m -XX:+UseParallelGC -XX:ParallelGCT
total Kb  158552  120040  103304       -
142: /usr/lib/sysevent/syseventd
total Kb    6832    5832    1096       -
146: /usr/lib/ldoms/drd
total Kb    2600    2320     408       -
1539: /home/OracleDB/11.2/ccr/bin/nmz -cron -silent
total Kb    3936    3152     264       -
1772: /usr/lib/ssh/sshd
total Kb    5680    5352     728       -
1773: /usr/lib/ssh/sshd
total Kb    7464    6928     408       -
======================================================
Следующим шагом будет проверка использования файловой системы /tmp:
root@T1000-spare # df -kl /tmp/
Filesystem            kbytes    used   avail capacity  Mounted on
swap                 14380920     104 14380816     1%    /tmp
=========================================================
root@T1000-spare # du -akd /tmp | sort -n | tail -5   - а эта команда отобразит 5 файлов большого размера внутри данной файловой системы.
Общее использование памяти в системе:
root@T1000-spare # vmstat -p 3
     memory           page          executable      anonymous      filesystem 
   swap  free  re  mf  fr  de  sr  epi  epo  epf  api  apo  apf  fpi  fpo  fpf
 14314224 7375848 26 67 1   0  13   23    0    0    0    0    0   40    1    1
 14381608 7361752 3 6   0   0   0    0    0    0    0    0    0    0    0    0
 14381288 7361616 0 0   0   0   0    0    0    0    0    0    0    0    0    0
=============================================
Данная команда будет отображать информацию раз в три секунды.
Конечно же необходимо проверить использование SWAP системой:
root@T1000-spare # swap -s
total: 193424k bytes allocated + 47176k reserved = 240600k used, 14381936k available
root@T1000-spare # swap -l
swapfile             dev  swaplo blocks   free
/dev/dsk/c0t0d0s1   32,9      16 16387600 16387600
======================================================
В данном разделе финальной комнадой будет проверка статистики ядра:
очень хорошая утилита kstat, имеет большое разнообразие дополнительных ключей, также можно использовать команду которую я указал ниже:

root@T1000-spare # echo "::kmastat"| mdb -k > /var/tmp/kmastat
root@T1000-spare # more /var/tmp/kmastat 
cache                        buf    buf    buf    memory     alloc alloc 
name                        size in use  total    in use   succeed  fail 
------------------------- ------ ------ ------ --------- --------- ----- 
kmem_magazine_1               16   1161   1524     24576      1161     0 
kmem_magazine_3               32   2184   2540     81920      2805     0 
kmem_magazine_7               64   1730   2413    155648      3043     0 
kmem_magazine_15             128   2701   2772    360448      3401     0 
kmem_magazine_31             256    337    341     90112       337     0 
kmem_magazine_47             384      0      0         0         0     0 

В данной таблице нужно смотреть на столбец "memory in use"  и на любую строку в которой "alloc fail" больше нуля.

Ну я думаю для одной статьи пока достаточно, не хочется нагружать Вас большим полотном надеюсь вскоре смогу продолжить свой обзор по наблюдению за питомцами на солярисе.