Настройка производительности для высокопроизводительных веб-сайтов.

Проверка «узких» мест сайта.

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

Continue Reading

Ищем файлы m4a в текущей папке и конвертируем их в mp3

find . -type f -name '*.m4a' -exec bash -c 'avconv -i "$0" "${0/%m4a/mp3}"' '{}' \;

для удаления файлов m4a запускаем команду

find . -type f -name '*.m4a' -exec bash -c 'rm "$0"' '{}' \;

dstat

Просмотреть существующие плагины

# dstat --list
internal:
 aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io,
 ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap,
 swapold, sys, tcp, time, udp, unix, vm
/usr/share/dstat:
 battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat,
 dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops,
 helloworld, innodb-buffer, innodb-io, innodb-ops, lustre,
 memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-io,
 mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, ntp,
 postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, squid,
 test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu,
 top-cpu-adv, top-cputime, top-cputime-avg, top-int, top-io, top-io-adv,
 top-latency, top-latency-avg, top-mem, top-oom, utmp, vm-memctl,
 vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi
#dstat -tldnpms 10

При этом будет выводиться:

  • текущее время – t
  • средняя загрузка системы – l
  • использования дисков – d
  • загрузка сетевых устройств – n
  • активность процессов – p
  • использование памяти – m
  • использование подкачки – s
  • с интервалов в 10 секунд
 # dstat -c --top-cpu -d --top-bio --top-latency
Module dstat_top_latency failed to load. (Kernel has no scheduler statistics, use at least 2.6.12)
----total-cpu-usage---- -most-expensive- -dsk/total- ----most-expensive----
usr sys idl wai hiq siq|  cpu process   | read  writ|  block i/o process   
  5   0  95   0   0   0|mysqld       0.2|  64k  121k|bash          2B    0
  0   0 100   0   0   0|                |   0     0 |                      
  0   0 100   0   0   0|ntpd         1.0|   0     0 |                      
  0   1  99   0   0   0|sshd: usersrs1.0|   0     0 |                      
  0   0 100   0   0   0|                |   0     0 |                      
  1   0  99   0   0   0|                |   0     0 |                      
  0   0 100   0   0   0|mysqld       1.0|   0     0 |                      
  1   0  99   0   0   0|                |   0     0 |                      
 #dstat --help
Usage: dstat [-afv] [options..] [delay [count]]
Versatile tool for generating system resource statistics
Dstat options:
  -c, --cpu              enable cpu stats
     -C 0,3,total           include cpu0, cpu3 and total
  -d, --disk             enable disk stats
     -D total,hda           include hda and total
  -g, --page             enable page stats
  -i, --int              enable interrupt stats
     -I 5,eth2              include int5 and interrupt used by eth2
  -l, --load             enable load stats
  -m, --mem              enable memory stats
  -n, --net              enable network stats
     -N eth1,total          include eth1 and total
  -p, --proc             enable process stats
  -r, --io               enable io stats (I/O requests completed)
  -s, --swap             enable swap stats
     -S swap1,total         include swap1 and total
  -t, --time             enable time/date output
  -T, --epoch            enable time counter (seconds since epoch)
  -y, --sys              enable system stats

  --aio                  enable aio stats
  --fs, --filesystem     enable fs stats
  --ipc                  enable ipc stats
  --lock                 enable lock stats
  --raw                  enable raw stats
  --socket               enable socket stats
  --tcp                  enable tcp stats
  --udp                  enable udp stats
  --unix                 enable unix stats
  --vm                   enable vm stats

  --plugin-name          enable plugins by plugin name (see manual)
  --list                 list all available plugins

  -a, --all              equals -cdngy (default)
  -f, --full             automatically expand -C, -D, -I, -N and -S lists
  -v, --vmstat           equals -pmgdsc -D total

  --float                force float values on screen
  --integer              force integer values on screen
  --bw, --blackonwhite   change colors for white background terminal
  --nocolor              disable colors (implies --noupdate)
  --noheaders            disable repetitive headers
  --noupdate             disable intermediate updates
  --output file          write CSV output to file

 

И это еще не все, dstat судов с количеством плагинов, которые расширяют его возможности значительно. Это можно проверить каталог / USR / доли / dstat для того, чтобы просмотреть их список. Некоторые из наиболее полезными являются:

  •   -disk-util = показывает, на сколько диски занят в данный момент
  •   -freespace = показывает текущее использование дискового пространства
  •   -proc-count= показывает количество запущенных процессов
  •   -top-bio= указывает на процесс ввода / вывода самого дорогого блока
  •   -top-cpu= обращает внимание на наиболее дорогостоящий процесс процессора
  •   -top-io= показана самая дорогая «нормальный» процесс ввода / вывода
  •   -top-mem= отображает процесс с использованием самых память

 

Некоторые примеры:

Чтобы узнать, кто ест всю память:

dstat -g -l -m -s --top-mem

Для показывает некоторые статистические данные о потреблении ресурсов процессора:

 

dstat -c -y -l --proc-count --top-cpu

Как отправить файл CSV

Чтобы отправить вывод в файл CSV для последующего использования мы можем выполнить следующую команду:

  1. # Dstat -output /tmp/sampleoutput.csv -cdn

приступаем к настройке.

# обновляем список пакетов и установим mc (дело вкуса, но я его ставлю)

apt-get update
apt-get install mc

# установим openvpn и приступим к настройке

apt-get install openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

# редактируем переменные

nano ./vars

# меняем строки

export KEY_SIZE=1024  # Длинна ключа
export KEY_EXPIRE=3650 # Срок действия ключа в днях

# описание сертификатов по-умолчанию

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="http://habrahabr.ru"
export KEY_EMAIL="org@example.com"

# сохраняем файл

# инициализируем переменные и чистим папку keys и создаем сертификаты

. ./vars
. ./clean-all
./build-ca			# корневой сертификат
./build-key-server server	# сертификат сервера
./build-dh			# ключ Диффи Хельман

# если вы планируете использовать tls-auth, который позволит скрыть порт на котором сервер слушает vpn подключения, защитить от DoS атак и кое чего еще, то выполните еще и эту строку:

openvpn --genkey --secret ./keys/ta.key

# Включили tls-auth? Тогда не забудьте передать ta.key клиентам, его надо будет положить рядом с сертификатом пользователя. # перенесем полученные сертификаты в рабочую папку

cp ./keys/ca.crt /etc/openvpn
cp ./keys/server.crt /etc/openvpn
cp ./keys/server.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn

# Для tls-auth, выполните и эту строку:

# создадим сертификаты пользователей, сколько вам нужно (вводить данные не обязательно, поля будут принимать значения переменных по-умолчанию, достаточно просто нажимать Enter. В конце будет предложено ввести пароль (Enter export password), он защитит ваш сертификат от импорта недоброжелателями, хорошенько его запомните)

./build-key-pkcs12 vpn.android
./build-key-pkcs12 vpn.windows
./build-key-pkcs12 vpn.debian
./build-key-pkcs12 vpn.ddwrt
./build-key-pkcs12 vpn.home

# после этого в папке /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ появятся ваши сертификаты vpn.android.*, vpn.windows.* и другие.

# Если захотите создать сертификаты поздней, подключаетесь по SSH, и:

#	cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
#	. ./vars
#	./build-key-pkcs12 vpn.newuser1
#	./build-key-pkcs12 vpn.newuser2

# настроим сервер

zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
nano /etc/openvpn/server.conf

# все настройки по-умолчанию нас устроят, меняем, раскомментируем:

    local IP_АДРЕС_ВАШЕГО_СЕРВЕРА
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    client-to-client # раскомментируйте, если хотите иметь доступ между клиентами внутри вашего VPN

# Для включения tls-auth, необходимо добавить (без #)

    # tls-auth ta.key 0

# Если хотите спрятать сервер от китайских ботов и ФСБ, поменяйте стандартный порт, на любой другой. Только не забудьте прописать этот же порт в настройках клиента.

    port 1194

# сохраняем

# применим настройки файрвола через rc.local, можно сделать иначе, но я остановился на этом варианте.

nano /etc/rc.local

# добавляем строки до exit 0

    iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
    iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# сохраняем

nano /etc/sysctl.conf

# раскомментируем строчку

    net.ipv4.ip_forward=1

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

reboot

Всё, серверная часть готова. Можно подключаться. Для перехода к следующим этапам, надо выгрузить с нашего сервера сертификаты из папки:

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/

Это можно сделать при помощи SSH, либо mc если у вас есть ftp сервер. Нам нужны только некоторые файлы, какие именно читаем ниже.

Настройка android клиента (root не требуется)

1. Устанавливаем на телефон OpenVPN for Android
2. Загружаем на карту памяти сертификат p12, брать тут

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/vpn.android.p12

3. Запускаем OpenVPN for Android
4. VPN Profiles > Add, вводим любое имя. Приступаем к настройке профиля:

  • Basic > Server Address: IP адрес вашего VPN сервера, либо имя домена если вы его привязали
  • Type: PKCS12 File
  • Select: Выбираем наш файл *.p12
  • PKCS12 Password: вводим пароль импорта сертификата, заданный при его генерации.
  • upd: используйте последнюю версию приложения, в ней проверка remote-cert-tls server включена по-умолчанию. либо включите вручную в настройках авторизации, проверку сертификата сервера
  • Если вы включили tls-auth на сервере, включите в настройках профиля tls-auth и выберите ta.key

5. Готово. Подключаемся и проверяем, текущий статус подключения доступен в панели уведомлений (можно добавить на рабочий стол ярлык для конкретного VPN, он будет стартовать сразу по клику на ярлык, без лишних телодвижений. Если хотите чтобы при каждом подключении спрашивало пароль, просто не сохраняйте его в настройках профиля).

Настройка Windows клиента

1. Скачиваем и устанавливаем клиент: 32bit | 64bit
2. Создаем файл конфигурации myvpnconfig.ovpn (обычный текстовый файл):

remote IP_вашего_сервера 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 vpn.windows.p12
verb 3
pull

 

# Если вы включили tls-auth на сервере, добавьте в конфиг эту строку:
tls-auth ta.key 1

3. Создаем batch скрипт (start_my_vpn.cmd) для запуска VPN сессии:

cd C:somepathopenvpn
"C:Program FilesOpenVPNbinopenvpn.exe" --config C:somepathopenvpnmyvpnconfig.ovpn

4. Скрипт и конфиг ложим в одну папку, в эту же папку кидаем vpn.windows.p12 сертификат, брать его тут

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/vpn.windows.p12

5. Готово, ярлык на скрипт кидаем на рабочий стол, запускаем от имени администратора или от пользователя с его правами, при запуске он попросит ввести пароль для «импорта» сертификата.

Если пароль верный, то несколько секунд и мы подключились:

Для не параноиков или автостарта туннеля без ввода пароля, можно вместо p12 использовать связку сертификатов ca.crt, vpn.windows.key и vpn.windows.crt, выглядит это так,
вместо

pkcs12 vpn.windows.p12

пишем:

ca ca.crt
cert vpn.windows.crt
key vpn.windows.key

Файлы брать все там же

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/

и положить в папку с myvpnconfig.ovpn и start_my_vpn.cmd.

Настройка Linux клиента

Настройка на примере debian 6.0

# ставим пакет openvpn
apt-get install openvpn

# создаем папку, в любом удобном месте для хранения сертификатов и скрипта подключения к VPN
mkdir /opt/openvpn

# создаем скрипт подключения
echo 'cd /opt/openvpn
/usr/sbin/openvpn --config /opt/openvpn/myvpnconfig.ovpn
' > /opt/openvpn/start_vpn.run

# создаем файл конфигурации
echo 'remote IP_ВАШЕГО_СЕРВЕРА 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
pkcs12 vpn.debian.p12
verb 3
pull' > /opt/openvpn/myvpnconfig.ovpn

# Если вы включили tls-auth на сервере, добавьте в конфиг эту строку:
# tls-auth ta.key 1

# vpn.debian.p12 берем как обычно на сервере /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
# опять же, можно вместо p12 использовать ca.crt, vpn.debian.key и vpn.debian.crt, как в примере с windows, для того чтобы не вводить пароль для подключения к VPN, это пригодиться например для автозапуска VPN.
chmod +x /opt/openvpn/start_vpn.run

Готово. Не забудьте положить vpn.debian.p12 или ca.crt, vpn.debian.key и vpn.debian.crt в папку со скриптом и файлом конфигурации.
Для подключения к VPN, просто выполните с повышенными привилегиями:

/opt/openvpn/start_vpn.run

 

Настройка роутера на dd-wrt (Big или Mega)

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

1. Перейдите на страницу router_ip/Diagnostics.asp (тех.обслуживание->команды)
2. Если у вас уже есть «Параметры запуска», то нажмите Редактировать и добавьте ниже приведенный код, после, либо до вашего. Если нет то просто вставьте его в «Командный процессор» и нажмите «Сохранить параметры запуска»
3. Собственно сам код запуска:

#### CERT ####
CA_CRT='-----BEGIN CERTIFICATE-----
C4dczC6ZeWIgri7krQzPIrX5hNYAc676PNv6iomNWVJNkugr
-----END CERTIFICATE-----'

CLIENT_CRT='-----BEGIN CERTIFICATE-----
C4dczC6ZeWIgri7krQzPIrX5hNYAc676PNv6iomNWVJNkugr
-----END CERTIFICATE-----'

CLIENT_KEY='-----BEGIN RSA PRIVATE KEY-----
C4dczC6ZeWIgri7krQzPIrX5hNYAc676PNv6iomNWVJNkugr
-----END RSA PRIVATE KEY-----'
#### CERT ####

#### OPEN VPN ####
OPVPNENABLE=`nvram get openvpncl_enable | awk '$1 == "0" {print $1}'`

if [ "$OPVPNENABLE" != 0 ]
then
   nvram set openvpncl_enable=0
   nvram commit
fi

sleep 30
mkdir /tmp/openvpn; cd /tmp/openvpn

echo "$CA_CRT" > ca.crt
echo "$CLIENT_CRT" > client.crt
echo "$CLIENT_KEY" > client.key

chmod 644 ca.crt client.crt
chmod 600 client.key

sleep 30

echo 'remote IP_ВАШЕГО_СЕРВЕРА 1194
client
dev tun
ping 10
comp-lzo
proto udp
tls-client
remote-cert-tls server
ca ca.crt
cert client.crt
key client.key
verb 3
pull' > openvpn.conf

# Если вы включили tls-auth на сервере, добавьте в конфиг эту строку:
# tls-auth ta.key 1

killall openvpn
openvpn --config /tmp/openvpn/openvpn.conf&
### MASQUERADE
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
iptables -I INPUT -i tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
###

4. Переменные CA_CRT, CLIENT_CRT и CLIENT_KEY, это содержимое файлов ca.crt, vpn.ddwrt.crt и vpn.ddwrt.key соответственно, просто открывайте их текстовым редактором и копируйте содержимое, в vpn.ddwrt.crt блок будет в самом конце, в двух других копируем содержимое полностью. Брать файлы известно где

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/

5. Не забудьте заменить IP_ВАШЕГО_СЕРВЕРА и нажать «Сохранить параметры запуска».
6. Перезагружаем роутер, пробуем подключиться к нему с другого устройства в вашем VPN. Посмотреть VPN IP адрес роутера можно например через ifconfig.

Помимо прочего, вы получаете возможность подключаться между устройствами, даже если они находятся за NAT провайдера, это очень удобно. Если конечно вы раскомментировали строку client-to-client в конфиге сервера.

Возникла задача мониторить Заббиксом доступность свитчей в сети. Вроде задача тривиальная, однако, пришлось немного потанцевать с бубном, пока нашлось решение. В итоге выкладываю шаблон, он умеет мониторить доступность железки (произвольной), задержку пинга до нее и процент потерь. Желательно установить fping.

Собственно, сам шаблон.