FastNetMon

Wednesday, 27 February 2013

Как практически посчитать максимальный объем памяти на платформе?



  1. ддр обычная - 8 гб для планки пределх
  2. ддр регистровая - есть планки до 32 гб на одну железку
  3. число каналов на процессоре
  4. из пункта 3 следует число планок на матери суммарное (оно кратно числу каналов)
  5. поддержка процессором регистровой памяти (онли серверные)
  6. на основании 1-5 можно посчитать предел, но с поправкой на то, что память развивается и завтра появятся более емкие планки
  7. мультисковетность, если проца два - планок вдвое больше сходу
Это довольно примерный план, на оснвоании которого можно посчитать максимальную практическую емкость памяти на платформе.

Сниффер UNIX сокета - как реализовать?

При именно такой постановке задача довольно сложная. Как простое решение рекомендую strace:
strace -s 1024 -f -p 4478 -e trace=read,write

25 прогнозов главного футуролога Cisco

Thursday, 21 February 2013

Установка WHDD

Утилита позиционируется как аналог mhdd, но, к сожалению, не является им в чистом виде.

Все тривиально:
apt-get install -y git cmake gcc make libncurses5-dev libncursesw5-dev
git clone https://github.com/krieger-od/whdd.git
cd whdd
cmake . && make && make install
У утилиты есть две версии - whdd-curses и whdd-cli.

Из приятных фишек - очень информативные read/write тесты. Минусы - работа со smart сводится к отображению параметров в  стиле smartctl.

Как запустить logrotate на Debian ранее запланированного срока?

Вот так:
logrotate --force /etc/logrotate.d/apache2

Monday, 18 February 2013

Аналог vzps на bash


Довольно топорно, но работает:
#!/bin/bash
for i in `ps aux | awk '{print $2}'`; do vzpid $i|grep -v CTID | awk '{print $1 " " $2}'|grep $1 | awk '{print $1}'  ;done
Пример использования:

/usr/bin/vzprocess 2001
5839
5840
5841
6400
6461
6462
6595
6602
6662
6785
6803
6865


Определение CPU, на которых выполняются процессы определенного контейнера?

До начала работ требуется поставить вот это дело: http://www.stableit.ru/2009/12/openvz-vztop-vzps.html

Далее же все осуществляется простой Bash командой:

for i in `vzps -E 1023 --no-headers   |awk '{print $2}'`; do cat /proc/$i/stat|awk '{print $39}';done|sort | uniq -c
Выдача будет примерно следующая:
      1 0
      3 1
      8 10
      7 11
      4 12
      3 13
      9 22
     11 23
      4 3
      2 4
      1 6
     12 8
     17 9
Обращаю внимание, что первый столбец - число процессов на заданном процессоре, второй - номер логического процессора.

Также предлагаю вариацию команды, отображающей физические слоты (в случае многопроцессорых - несколько реальных, физических процессоров):

for i in `vzps -E 1023 --no-headers   |awk '{print $2}'`; do cpu=$(cat /proc/$i/stat|awk '{print $39}'); cat /sys/devices/system/cpu/cpu$cpu/topology/physical_package_id; done|sort | uniq -c
Ее выдача имеет похожий вид:
     44 0
     38 1

Linux: physical id/processor mapping

How to get list of logical cores per every physical cpu in Linux?

It's very tricky and we need use Perl:
cat /proc/cpuinfo |egrep '(^processor)|(physical id)' | awk -F": " '{printf $2 " "}'| perl -e '$_=<>; @list=split/\s+/,$_; $hs={}; while(scalar @list > 0) { ($a,$b) = (shift @list, shift @list); push @{$hs->{$b}}, $a;} for my $cpu (keys %$hs) {print "cpu:$cpu\n";print join ",", @{$hs->{$cpu}}; print "\n"}' 
Sample script output looks like:
cpu:1
6,7,8,9,10,11,18,19,20,21,22,23
cpu:0
0,1,2,3,4,5,12,13,14,15,16,17 
But we have a very simple solution (works pretty on 2.6.18/rhel5):
for i in `ls /sys/devices/system/node|grep node`; do cpu=$(echo $i|sed 's/node//'); echo -n "$cpu: "; cat /sys/devices/system/node/$i/cpulist|sed 's/-/../g' | perl -e 'print join ",", (eval(<>)); '; echo  ;done 
Sample output is very similar, but script is too short.
0: 0,1,2,3,4,5,12,13,14,15,16,17
1: 6,7,8,9,10,11,18,19,20,21,22,23
Sample content of cpilist elements in proc fs:

# cat /sys/devices/system/node/node1/cpulist
6-11,18-23
# cat /sys/devices/system/node/node0/cpulist
0-5,12-17

Как узнать число физических процессоров в Linux?

Очевидный вариант:
cat /proc/cpuinfo | grep 'physical id'  | sort | uniq | wc -l
Неочевидный (точно работает на 2.6.18/rhel5, 2.6.32/rhel6):
ls /sys/devices/system/node|grep node|wc -l 

Как посмотреть, на каком процессоре/ядре работают процессы?

top, f => j => Enter. И в поле: P будет номер используемого CPU.

Например, вот так:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P COMMAND                                                                
 6020 whistler  18   0 8853m 649m  10m S    2  4.1   4:32.05 1 java                                                                  

 7503 root      18   0 18944 1284 1024 R    0  0.0   0:00.01 3 top                                                                    
    1 root      18   0  8364  836  712 S    0  0.0   0:01.82 1 init                                                                    
 1517 root      19   0 54572  996  496 S    0  0.0   0:00.00 0 saslauthd                                                              

 1518 root      19   0 54572  656  156 S    0  0.0   0:00.00 0 saslauthd                                                              

 1525 root      15   0  5988  728  568 S    0  0.0   0:00.14 0 syslogd                                                                
 1529 daemon    18   0 18720  432  272 S    0  0.0   0:00.00 2 atd                                                                    
 1542 bind      21   0  177m  17m 2280 S    0  0.1   0:00.04 4 named                                                                  
 1560 root      18   0  352m  18m  11m S    0  0.1   0:01.03 2 apache2                                                                
 1563 www-data  15   0  136m 3284  476 S    0  0.0   0:00.28 2 apache2                                                                

 1582 root      15   0 20916  992  764 S    0  0.0   0:00.03 2 cron                                                                    
 1588 messageb  16   0 23276  880  632 S    0  0.0   0:00.00 0 dbus-daemon                 

Sunday, 17 February 2013

Script for netconsole activation on Debian squeeze

Данный скрипт использовать НЕ РЕКОМЕНДУЕТСЯ!!!! Рекомендую использовать новый: http://www.stableit.ru/2013/03/netconsole-debian-squeeze.html

Вот такой скриптец. http://fastvps.googlecode.com/svn/trunk/scripts/activate_netconsole.pl

Что он делает? Он включает логгирование ошибок ядра (netconsole) на сервер и пор, указаные в начале кода.

Как им пользоваться? Крайне просто:
wget http://fastvps.googlecode.com/svn/trunk/scripts/activate_netconsole.pl
perl activate_netconsole.pl 
В результате этих операций в текущей сессии будет загружен модуль netconsole, а также будет настроена его автозагрузка при следующем запуске системы.

У модуля есть недостаток - netconsole отвалится в случае, если машина, на которую идет логгирование будет доступна без роутинга, напрямую. Также он отвалится в случае, если поменяется mac роутера.

Идеальное решение выглядит в том, чтобы каждый раз при загрузке системы определять эти параметры автоматически. Но пока подходит и такой вариант :)

Добавление модулей в автозагрузку Debian на примере netconsole

Особенность Debian в том, что само имя модуля нужно добавлять в /etc/modules, а сами настройки модуля в /etc/modprobe.d/имя_модуля.conf.

Например:
echo 'netconsole' >> /etc/modules
echo 'options netconsole netconsole=6666@5.9.yy.xx/eth0,514@78.47.xx.zz/78:fe:3d:43:4f:96' > /etc/modprobe.d/netconsole.conf

Friday, 15 February 2013

OpenVZ: самый быстрый способ вывести load average на всех конетейнерах

Вот такой хитрый хак:
vzlist -o ctid,laverage 
Пример выдачи:
      1041 0.00/0.00/0.00
      1042 0.00/0.00/0.00
      1303 0.66/0.52/0.35
      4226 0.65/0.97/1.52
      7846 0.48/0.23/0.33
      7924 0.00/0.00/0.00
      8126 0.00/0.00/0.00
      8218 0.07/0.04/0.02
      8284 0.00/0.01/0.00
      8447 0.10/0.16/0.17

OpenVZ: Показать число running процессов с детализацией по контейнерам

Вот такой вот набор команд на баше:
 for i in `ps aux|awk '{if($8=="R"){print $2}}'`; do vzpid $i | grep -v CTID | awk '{print $2}';done |sort | uniq -c
      1 1003
      2 1004
      1 1011
      5 1018
      5 1020
     19 1023
      1 1027
      5 1034
      2 1039
Выдача примерно такая:

      1 1003
      2 1004
      1 1011
      5 1018
      5 1020
     19 1023
      1 1027
      5 1034
      2 1039