FastNetMon

Thursday 24 June 2010

Встреча Шварцнеггера и Медведева, смотреть всем :)

http://www.youtube.com/watch?v=CnUUlSDDlBA

Компания Nokia выпустила пакет Qt SDK 1.0 и среду разработки Qt Creator 2.0

Сабж :)

Активация Hyper-Threading на серверах NHS-1, NHS-2, NHS-3, NHS-24 fastvps.ru

Заказываем KVM, заходим в биос клавишей DEL, "Advanced BIOS features", "CPU feature", Hyper-Threading function - enabled после этого нажимаем F10 и подтверждаем сохранение настроек.

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

Как ограничить число php5-cgi процессов при использовании mod_fcgid?

This summary is not available. Please click here to view the post.

Активация модуля geo в Nginx 0.7.65

Будем подключать вот это:
http://wiki.nginx.org/NginxHttpGeoModule

Почему именно geo, а не geoip? Вот результаты тестов, проведенных нашими сотрудниками:

С геоип:
средняя для -n1 (10 измерений, каждый запрос с нового адреса): 5.20
средняя для -n10000 -c1: 6.63
Средняя для -n10000 -c10: 55.06
потребление памяти: каждый воркер имеет свою базу geoip (страны - 500 Кб, города - 20 Мб)

C гео:
средняя для -n1 (10 измерений, каждый запрос с нового адреса): 6.61
средняя для -n10000 -c1: 6.73
Средняя для -n10000 -c10: 58.01
потребление памяти: каждый воркер имеет свою базу geoip (только страны - 4 Мб)

Без геоип:
средняя для -n1 (10 измерений, каждый запрос с нового адреса): 6.70
Средняя для -n10000 -c1: 6.76
Средняя для -n10000 -c10: 57.91


Скачиваем файлы с IP адресами:

cd /usr/src
wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
unzip GeoIPCountryCSV.zip


Теперь, даже если у Вас nginx стоит из пакетов стягиваем дистрибутив nginx треубуемой версии:

cd /usr/src
wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz
tar -xf nginx-0.7.65.tar.gz


Конвертируем geoip файл в формат nginx и переносим в папку nginx:

perl nginx-0.7.65/contrib/geo2nginx.pl < GeoIPCountryWhois.csv > geo.conf
mv geo.conf /etc/nginx/



Подключаем к nginx:
vi /etc/nginx/nginx.conf


Также вниз блока http добавляем следующее:

geo $country {
default no;
include /etc/nginx/geo.conf;
}


Далее изменяем формат логов, чтобы туда также попадала страна клиента:

log_format vhost_ip_full_format '$remote_addr - $remote_user [$time_local] $host $server_addr $request '
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for" $request_time-$upstream_response_time "$country"';
access_log /var/log/nginx/access.log vhost_ip_full_format;


Перезапускаем Nginx:
/etc/init.d/nginx reload

Wednesday 23 June 2010

e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang

Вот вылезла такая радость на машинке сильно нагруженной по сети:


[399393.714927] e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
[399393.714929] Tx Queue <0>
[399393.714930] TDH
[399393.714931] TDT <91>
[399393.714932] next_to_use <91>
[399393.714933] next_to_clean
[399393.714934] buffer_info[next_to_clean]
[399393.714935] time_stamp <105f49deb>
[399393.714936] next_to_watch
[399393.714937] jiffies <105f49f85>
[399393.714938] next_to_watch.status <0>
[399395.715956] e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
[399395.715957] Tx Queue <0>
[399395.715958] TDH
[399395.715958] TDT <91>
[399395.715959] next_to_use <91>
[399395.715959] next_to_clean
[399395.715960] buffer_info[next_to_clean]
[399395.715960] time_stamp <105f49deb>
[399395.715961] next_to_watch
[399395.715961] jiffies <105f4a179>
[399395.715962] next_to_watch.status <0>
[399397.709166] e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
[399397.709167] Tx Queue <0>
[399397.709168] TDH
[399397.709168] TDT <91>
[399397.709169] next_to_use <91>
[399397.709169] next_to_clean
[399397.709170] buffer_info[next_to_clean]
[399397.709170] time_stamp <105f49deb>
[399397.709171] next_to_watch
[399397.709171] jiffies <105f4a36d>
[399397.709172] next_to_watch.status <0>
[399399.706064] e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
[399399.706065] Tx Queue <0>
[399399.706066] TDH
[399399.706066] TDT <91>
[399399.706066] next_to_use <91>
[399399.706067] next_to_clean
[399399.706067] buffer_info[next_to_clean]
[399399.706068] time_stamp <105f49deb>
[399399.706068] next_to_watch
[399399.706069] jiffies <105f4a561>
[399399.706069] next_to_watch.status <0>
[399400.704517] ------------[ cut here ]------------
[399400.704547] WARNING: at net/sched/sch_generic.c:255 dev_watchdog+0xd2/0x16c()
[399400.704587] Hardware name: MS-7522
[399400.704608] NETDEV WATCHDOG: eth0 (e1000): transmit queue 0 timed out
[399400.704634] Modules linked in: xt_multiport acpi_cpufreq cpufreq_stats cpufreq_powersave cpufreq_userspace cpufreq_conservative ip6table_filter ip6_tables xt_recent xt_tcpudp nf_conntrack_ipv4 nf_defrag_ipv4 xt_state xt_owner iptable_filter ip_tables x_tables quota_v2 quota_tree fuse nf_conntrack_ftp nf_conntrack loop snd_pcm snd_timer snd soundcore wmi i2c_i801 snd_page_alloc tpm_tis tpm tpm_bios i2c_core usbhid evdev hid pcspkr button ext3 jbd mbcache dm_mirror dm_region_hash dm_log dm_snapshot dm_mod sd_mod crc_t10dif e1000 uhci_hcd ehci_hcd thermal fan processor thermal_sys raid10 raid456 async_raid6_recov async_pq raid6_pq async_xor xor async_memcpy async_tx raid1 raid0 md_mod atiixp ahci sata_nv sata_sil sata_via libata via82cxxx ide_core 3w_9xxx 3w_xxxx scsi_mod [last unloaded: scsi_wait_scan]
[399400.705068] Pid: 0, comm: swapper Not tainted 2.6.33.4-fastvps-2-4 #1
[399400.705095] Call Trace:
[399400.705114] [] ? dev_watchdog+0xd2/0x16c
[399400.705146] [] ? dev_watchdog+0xd2/0x16c
[399400.705173] [] ? warn_slowpath_common+0x77/0xa3
[399400.705201] [] ? dev_watchdog+0x0/0x16c
[399400.705227] [] ? warn_slowpath_fmt+0x51/0x59
[399400.705254] [] ? try_to_wake_up+0x248/0x256
[399400.705282] [] ? autoremove_wake_function+0x9/0x2e
[399400.705310] [] ? netif_tx_lock+0x3d/0x69
[399400.705337] [] ? netdev_drivername+0x3b/0x40
[399400.705364] [] ? dev_watchdog+0xd2/0x16c
[399400.705392] [] ? blk_rq_timed_out_timer+0x2a/0x103
[399400.705421] [] ? run_timer_softirq+0x1c4/0x263
[399400.705450] [] ? __do_softirq+0xdd/0x1a2
[399400.705476] [] ? lapic_next_event+0x18/0x1d
[399400.705503] [] ? call_softirq+0x1c/0x30
[399400.705529] [] ? do_softirq+0x3f/0x79
[399400.705555] [] ? irq_exit+0x36/0x76
[399400.705580] [] ? smp_apic_timer_interrupt+0x87/0x95
[399400.705608] [] ? apic_timer_interrupt+0x13/0x20
[399400.705633] [] ? acpi_idle_enter_bm+0x273/0x2a5 [processor]
[399400.705685] [] ? acpi_idle_enter_bm+0x26c/0x2a5 [processor]
[399400.705729] [] ? cpuidle_idle_call+0x94/0xee
[399400.705757] [] ? cpu_idle+0x59/0x91
[399400.705782] ---[ end trace e53d97746b1a3cdf ]---
[399402.758125] e1000: eth0 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX



Юзаем фикс аналогичный http://phpsuxx.blogspot.com/2009/11/e1000-centos-netdev-watchdog-eth0.html

Источник: https://bugzilla.redhat.com/show_bug.cgi?id=398921

Monday 21 June 2010

Обратите внимание на то, чтобы среди бумаг не оказались деньги, это расценивается как попытка подкупа и влечет за собой отказ в выдаче визы

• Предоставьте на собеседовании все документы, которые Вы прилагаете к
заявлению. Обратите внимание на то, чтобы среди бумаг не оказались деньги,
это расценивается как попытка подкупа и влечет за собой отказ в выдаче визы.


(c) Памятка о порядке получения виз Германии

Официальный сайт посольства Финляндии в Москве

Ибо хрен найдешь его даже гуглом. http://www.finland.org.ru

Saturday 19 June 2010

Где купить тайм-карты для XboX Live Gold?

Да, например, здесь: http://www.getzeny.ru/partnerbuy/xbox.php

Или вот тут тоже все супер: http://pinsell.ru/ Сразу после оплаты получил ключи на продление и продлился :)

Thursday 17 June 2010

Как запустить программу с пониженным приоритетом ввода-вывода?

ionice -c 3 programm_name

Проверяйте файловую систему, если на сервере отказала память

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

Увеличение диска для Xen VPS с диском в файле

Допустим, у нас есть VPS с малым диском и мы хотим его увеличить. Самый безопасный путь следующий.

Создаем новый файл-фс большего размера:
dd if=/dev/zero of=/home/vps/domain-new-disk bs=1000000 count=20000
mkfs.ext3 domain-new-disk


Останавливаем VPS:
xm shutdown domain


Убежадемся, что VPS точно остановился:
xm list


Монтируем оба образа:

mkdir /mnt/domain
mkdir /mnt/domain-new
mount -o loop /home/vps/domain-disk /mnt/domain
mount -o loop /home/vps/domain-new-disk /mnt/domain-new


Переносим все файлы:
cp -a /mnt/domain/* /mnt/domain-new/


Убеждаемся в идентичности содержимого (визуально, по размеру):
du -sh /mnt/domain
du -sh /mnt/domain-new


Отмонтируем оба диска:
umount mnt/domain-new
umount mnt/domain


Теперь редактируем файл конфигурации домена, указываем там новый диск:
vi /etc/xen/domain.conf


Запускаем VPS:
xm create -c domain

Защита от запуска нескольких инстансов (экземпляров) Perl / Python скриптов

Решение для Perl

Стоит задача - есть некий скрипт, который производит определенные действия с определенной периодичностью. Вызов скрипта в определенном случае может заблокироваться (допустим, ожиданием ввода-вывода). При этом следом может запуститься вторая копия скрипта (интервал не велик), третья и далее. Что в итоге приведет к тому, что система после разблокировки рухнет. Допустим, наш скрипт зовут: /usr/bin/ispmanager_fix_fastcgi и написан он на Перле.

Для начала алгоритм - узнаем имя текущего скрипта (ну не захардкоживать же его в самом деле), грепаем выдачу ps aux (текущие запущенные в системе процессы) на предмет наличия указанного. Если находим, то просто завершаемся - значит предыдущий запуск скрипта еще продолжает работать.

Во-первых, тут нам понадобится спец-переменная $0, которая содержит имя исполняемой программы. В моем случае это будет "/usr/bin/ispmanager_fix_fastcgi". То есть, код будет такой:
ps aux | grep "/usr/bin/ispmanager_fix_fastcgi"
Далее нам надо будет исключить из выдачи ps aux скрипт, из которго сделан запрос проверки. Тут нам поможет встроенная переменная $$, содержащая pid текущего процесса, который в пределах системы, разумеется, уникален. То есть, у нас получается нечто вида:

ps aux | grep "/usr/bin/ispmanager_fix_fastcgi" | grep -v "pid"


Также в выдачу ps aux обязательно попадет сам grep, поэтому его также нужно исключить:

ps aux | grep "/usr/bin/ispmanager_fix_fastcgi" | grep -v "pid" | grep -v grep


Итого получается следующий Perl код:

#!/usr/bin/perl

use strict;
use warnings;

unless ( system("ps aux | grep $0 | grep -v grep | grep -v $$ | grep -v '/bin/sh -c' > /dev/null") ) {
print "Duplicate!\n";
exit 0; # another copy already running
}

# тут код параллельного запуска которого мы и собираемся избегать

Исключение /bin/sh -c добавлено для Debian cron, где каждая cron задача запускается как два процесса.


Конечно, решение не подойдет для форкащихся процессов, которые имеют одинаковые имена, не подойдет оно и для скриптов запускающихся друг за другом, но если интервал между запусками велик и от него не зависят жизни людей (тут уже ключевые слова звучат, например, как "flock"), то юзать вполне можно :)

Как вариант "красивого решения", могу предложить модуль: Proc::ProcessTable, который на Debian ставится вот так:
apt-get install -y libproc-processtable-perl

Решение для Python

Логику рассуждений повторять не буду, приведу лишь код.

import os

pid = os.getpid()
Nil, scriptname = os.path.split(sys.argv[0])

result = os.system("ps aux | grep '" + scriptname + "' | grep -v grep | grep -v '" + str(pid) + "' > /dev/null" )

if result == 0:
    print "Another copy of script already running"
    sys.exit(0)

Wednesday 16 June 2010

Запуск теста железа на FastVPS.ru

Перезагружаемся в Rescue, даем команду "hwcheck", в меню выбора нажимаем A. После этого тесты будут запущены. Потом отключаемся от консоли командами CTRL+a d, в ответ нам будет выдано "[detached]", что ознаачет о том, что мы отключились от экрана, где идут тесты, но при этом тесты не прерваны. После этого можно отключаться от ssh.

Есть также способ запуска теста без скрина:
/root/.oldroot/nfs/check/menu.sh

Через часов 12 снова подключаемся к машине по ssh, вводим команду screen -r и перед нами разверытвается окно с данными законченых тестов, но его не видно целиком - только нижнюю часть. Теперь нажимаем клавиши CTRL+a [, после чего screen переходит в copy-mode и стрелочками можно подняться на экран выше и просмотреть результаты всех тестов.

Проект Kinect (ex. "Natal") от Microsoft, презентация на E3

Всем смотреть: http://www.youtube.com/watch?v=PY68bAeDtF0

С 11й минуты начинается самая зрелищная часть :)

Monday 14 June 2010

Запуск 32 битного софта на 64 битной платформе

На 64 битной машине при попытке запустить 32 битный бинарик имеем следующее:

./sc_serv
-bash: ./sc_serv: No such file or directory


apt-get install ia32-libs


И все, пашет :)

Sunday 6 June 2010

На Титане (спутник Сатурна) обнаружена жизнь, не базирующаяся на воде

Охренеть, блин... http://www.dailymail.co.uk/sciencetech/article-1284013/Do-aliens-live-Saturn-moon.html?ito=feeds-newsxml

Subdreamer жжот

Dear Subdreamer Customer,

A serious security vulnerability in the latest release has just come to our attention. If you have already downloaded Subdreamer CMS 3.1 then please download and apply this patch immediately:


А из наших я ни у кого не видел, чтобы присылали нечто подобное. Промолчат, запихают в новый релиз и делу конец.

О кариесе


Отличается от большинства остальных бактерий, находящихся в нашем рту, способностью жить и процветать при высокой кислотности. Кроме того, умеет производить специальный полимер, с помощью которого может прилипать даже к гладкой поверхности зубов (а не только болтаться в трещинках и пазухах). Для производства этого полимера ей абсолютно необходима сахароза (именно она, а не какой-нибудь иной сахар), отсюда и связь между большим потреблением сахара и развитием кариеса.

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


http://shvarz.livejournal.com/238226.html

Saturday 5 June 2010

Как правильно разбирать soft-raid на fastvps.ru?

Итак, допустим, мы имеем следующую картину raid массивов:

cat /proc/mdstat
Personalities : [raid1] [raid10] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
4200896 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
306263040 blocks [2/2] [UU]
[==========>..........] resync = 51.7% (158425088/306263040) finish=51.3min speed=47962K/sec

unused devices:



Очевидно, у нас три массива - /dev/md0, /dev/md1, /dev/md2. Каждый из которых, соответственно, состоит из двух физических дисков - md0 из /dev/sda1, /dev/sdb1, md1 из /dev/sda2, /dev/sdb2, md2 из /dev/sda3, /dev/sdb3.

Допустим, у нас физически отказал диск /dev/sda и в результате этого сервер начинает работать крайне нестабильно (да, несмотря на raid), поэтому сбойный жесткий диск необходимо выбросить из массива и дождаться плановой его замены. Но как это сделать?

Разбор массива осуществляется двумя шагами - метим диск как faulty (отказ) ключом -f, а потом выбрасываем ключом -r. Например, для массива /dev/md0 это выглядит так:

mdadm /dev/md0 -f /dev/sda1
mdadm /dev/md0 -r /dev/sda1


После этого массив /dev/md0 перейдет в однодисковый (DEGRADED) режим:

cat /proc/mdstat
Personalities : [raid1] [raid10] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1]
4200896 blocks [2/1] [_U]


Повторяем аналогичную операцию для других массивов (/dev/md1 и /dev/md2) и все, сбойный диск исключен из массива.

Tuesday 1 June 2010

BTRFS


Anybody who has had to replace a drive in a RAID array knows that the rebuild process can be long and painful. While all of that data is being copied, the array runs slowly and does not provide the usual protections. The advantage of running RAID within Btrfs is that the filesystem knows which blocks contain useful data and which do not. So, while an MD-based RAID array must copy an entire drive's worth of data, Btrfs can get by without copying unused blocks.


Круто, чо.

Лимитирование полосы пропускания дла каждого вихоста libapache2-mod-bw

http://geekosphere.org/898/limit-bandwidth-per-vhost-in-apache2-on-debianlenny/

Юзаете венду?

Компания Google начала воплощение в жизнь плана по полному избавлению от использования платформы Windows на рабочих станциях персонала компании, мотивировав такое решение работой в области повышения информационной безопасности. Указание о повсеместном переходе на другие операционные системы было дано в начале января, после истории со взломом нескольких машин сотрудников Google, через уязвимость в Internet Explorer.


http://rss.feedsportal.com/c/32457/f/477056/s/ad9d475/l/0L0Sopennet0Bru0Copennews0Cart0Bshtml0Dnum0F26797/story01.htm