Установка UnixBench в Debian

Недавно я написал свой обзор выделенный сервер от Kimsufi. В этот раз я протестирую VPS от OVH для того чтобы иметь возможность адекватно сравнить производительности VPS и микро-сервера на базе процессора Atom N2800. Ну и заодно, пользуясь случаем решил отдельно упомянуть о том как установить UnixBench в Debian для того чтобы протестировать производительность сервера.

Сразу после установки, на чистой системе для запуска UnixBench в Debian необходимо установить следующий набор пакетов:

apt-get install libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules gcc make

Далее скачиваем и распаковываем архив с файлами UnixBench:

wget http://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
tar xvf UnixBench5.1.3.tgz

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

cd UnixBench
./Run

Ниже привожу результаты теста UnixBench на VPS SSD 1:

1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       28881574.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3758.7 MWIPS (9.7 s, 7 samples)
Execl Throughput                               6423.7 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks       1100112.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          300976.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       2152804.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2058718.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 390629.5 lps   (10.0 s, 7 samples)
Process Creation                              17677.5 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   8510.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1087.0 lpm   (60.0 s, 2 samples)
System Call Overhead                        4052402.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   28881574.8   2474.9
Double-Precision Whetstone                       55.0       3758.7    683.4
Execl Throughput                                 43.0       6423.7   1493.9
File Copy 1024 bufsize 2000 maxblocks          3960.0    1100112.0   2778.1
File Copy 256 bufsize 500 maxblocks            1655.0     300976.0   1818.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    2152804.6   3711.7
Pipe Throughput                               12440.0    2058718.7   1654.9
Pipe-based Context Switching                   4000.0     390629.5    976.6
Process Creation                                126.0      17677.5   1403.0
Shell Scripts (1 concurrent)                     42.4       8510.5   2007.2
Shell Scripts (8 concurrent)                      6.0       1087.0   1811.7
System Call Overhead                          15000.0    4052402.4   2701.6
                                                                   ========
System Benchmarks Index Score                                        1786.3

Исходя из результатов полученных в процессе работы теста UnixBench можно сделать вывод, что производительность VPS более чем в два раза выше сервера на базе процессора Atom N2800 от Kimsufi.

Фильтры Google Analytics

Для точного учета статистики можно использовать встроенные фильтры Google Analytics. Причем следует отметить, что фильтры в Google Analytics предлагают гораздо больший функционал по сравнению с возможностями Яндекс.Метрики. Единственный недостатком сервиса является то, что с первого взгляда интерфейс Google Analytics кажется сильно запутанным.

В большинстве случаев я используя фильтр по ip-адресу для того чтобы исключить из статистики все нежелательные посещения. Для добавления нового фильтра зайдите в интерфейс Google Analytics. В верхнем меню нажмите на ссылку ‘Администратор’, выберите нужный аккаунт и ресурс, а затем в крайнем правом столбце ‘Представление’ нажмите на ссылку ‘Фильтры’.

Чтобы добавить новый фильтр нажмите кнопку ‘Добавить’, введите ip-адрес в название нового фильтра. Измените тип фильтра на ‘Встроенный’, ‘Исключить’. В качестве источника цели укажите ‘трафик с IP-адресов’ и затем укажите один ip-адрес или диапазон ip-адресов.

Разметка диска в Linux

Дата: 23.02.2016Метки:

В этой заметке я опишу процесс разметки диска в Linux. Для этого я буду использовать консольную утилиту fdisk и набор программ из пакета lvm2. В качестве рабочей среды я использовал Debian LiveCD, но вы можете использовать любой удобный для вас дистрибутив.

Для удобства обслуживания я выполню разметку диска в Linux на основе lvm разделов. Использование lvm дает нам гибкость в обслуживании системы. При желании мы можем с легкостью изменить размер, удалить или добавить новые разделы. Отдельно следует упомянуть возможность создавать снапшоты.

В процессе разметки диска я выделю один lvm раздел для установки системы, и расскажу как создать еще два раздела под swap и хранение данных. Что касается меня, из-за ограниченного размера диска в VPS я буду использовать только один раздел.

Перед тем как начать разметку диска в Linux, необходимо определиться с именем устройства и его файловой структурой. Для этого выполните команду df:

root@rescue:~# df
Filesystem     1K-blocks   Used Available Use% Mounted on
rootfs          10320184 599852   9196264   7% /
udev               10240      0     10240   0% /dev
tmpfs             201216    144    201072   1% /run
/dev/vda1       10320184 599852   9196264   7% /
tmpfs               5120      0      5120   0% /run/lock
tmpfs             402420      0    402420   0% /run/shm
/dev/vdb1       10320184 894980   8985080  10% /mnt/vdb1

Из листинга выше видно, что в моем случае я буду работать с устройством /dev/vdb1, которое смонтировано в каталог /mnt/vdb1. Следует отметить, что имя диска vdb1, которое используется у меня, зависит от конкретной системы и может отличаться.

Чтобы выполнить разметку диска в fdisk, а затем создать на нем lvm разделы, нам необходимо сначала размонтировать файловую систему диска:

umount /mnt/vdb1

Чтобы просмотреть таблицу разделов vdb1, выполните команду fdisk -l аналогично примеру ниже:

root@rescue:~# fdisk -l /dev/vdb

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    20971519    10484736   83  Linux

Запускаем fdisk, в качестве параметра укажите свой диск:

fdisk /dev/vdb

Введите m для просмотра списка команд:

root@rescue:~# fdisk /dev/vdb

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Удаляем уделам старую таблицу разделов и создаем один раздел под lvm:

root@rescue:~# fdisk /dev/vdb

Command (m for help): d
Selected partition 1

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519

Command (m for help): a
Partition number (1-4): 1

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/vdb: 10.7 GB, 10737418240 bytes
2 heads, 17 sectors/track, 616809 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1   *        2048    20971519    10484736   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Далее опишу последовательности моих действий в fdisk. Перед тем как выполнить разметку, мы сначала полностью удаляем все существующие разделы на диске. Для этого введите d, а затем укажите номер раздела. Команду повторяем до полного удаления всех логических разделов на диске.

Нажмите n чтобы создать раздел в fdisk и укажите тип раздела p. Я создаю один большой логический раздел под lvm, поэтому я использую весь доступный объем диска. На запрос указать первый и последний сектор просто жмем Enter.

Далее в fdisk нажимаем a и указываем номер раздела 1 чтобы сделать раздел загрузочным. Затем жмем t и вводим 8e для того чтобы изменить тип раздела на lvm.

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

Далее нам необходимо создать lvm внутри нашего раздела. В случае отсутствия в системе пакета lvm2, выполните его установку.

Создаем физический том внутри созданного ранее раздела:

pvcreate /dev/vdb1

Создаем группу томов с именем vg1:

vgcreate vg1 /dev/vdb1

Чтобы вывести информацию о группе томов, выполните команду:

vgdisplay vg1

Далее создадим логический том для установки системы, swap, home:

lvcreate -n root -L 10G vg1
lvcreate -n swap -L 4G vg1
lvcreate -n home -L 100G vg1

Названия томов root, swap, home и их размер можете менять по своему усмотрению. Для просмотра свободного пространства внутри группы томов используйте команду vgdisplay vg1. Если понадобится изменить размер тома lvm просто выполните команду:

lvextend -L -10G /dev/vg1/home
lvextend -L +10G /dev/vg1/root

Форматируем разделы в файловой системе ext4:

mkfs.ext4 /dev/vg1/root
mkfs.ext4 /dev/vg1/home

Для lvm раздела, который будет использоваться под swap необходимо выполнить команду:

mkswap /dev/vg1/swap

На этом разметка диска в Linux закончена.

Обновление ядра Debian

Дата: 18.02.2016Метки:

В предыдущем посте я уже писал про самостоятельную сборку ядра в Debian. В зависимости от параметров компьютера, компиляция ядра в Debian может занять продолжительное время. Поэтому в этой заметке я расскажу как выполнить обновление ядра Debian используя для этого готовые пакеты. Чтобы обновить ядро в Debian вы можете использовать stable, backports или experimental репозиторий.

Какой репозитрий выбрать зависит от необходимой версии ядра Debian. Для начала добавьте в систему backports и experimental репозитории Debian. Для этого откройте файл:

nano /etc/apt/sources.list

И добавьте в него следующие строки:

deb http://ftp.ru.debian.org/debian/ jessie-backports main
deb-src http://ftp.ru.debian.org/debian/ jessie-backports main

deb http://ftp.ru.debian.org/debian/ experimental main
deb-src http://ftp.ru.debian.org/debian/ experimental main

Не забудьте заменить слово jessie на кодовое имя вашего дистрибутива Debian. Далее выполните обновление кэша доступных пакетов:

apt-get update

Теперь выполните поиск доступных для установки пакетов, содержащих ядро Debian. Обратите внимание на листинг ниже. Вначале идут пакеты из stable репозитроия, затем backports с буквенным индексом bpo и в самом конце experimental с индексом trunk.

# apt-cache search linux-image
linux-headers-3.16.0-4-amd64 - Header files for Linux 3.16.0-4-amd64
linux-image-3.16.0-4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-3.16.0-4-amd64-dbg - Debugging symbols for Linux 3.16.0-4-amd64
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-amd64-dbg - Debugging symbols for Linux amd64 configuration (meta-package)
nvidia-kernel-3.16.0-4-amd64 - NVIDIA binary kernel module for Linux 3.16.0-4-amd64
linux-headers-4.3.0-0.bpo.1-amd64 - Header files for Linux 4.3.0-0.bpo.1-amd64
linux-image-4.3.0-0.bpo.1-amd64 - Linux 4.3 for 64-bit PCs
linux-image-4.3.0-0.bpo.1-amd64-dbg - Debugging symbols for Linux 4.3.0-0.bpo.1-amd64
linux-headers-4.4.0-trunk-amd64 - Header files for Linux 4.4.0-trunk-amd64
linux-headers-4.4.0-trunk-rt-amd64 - Header files for Linux 4.4.0-trunk-rt-amd64
linux-image-4.4.0-trunk-amd64 - Linux 4.4 for 64-bit PCs
linux-image-4.4.0-trunk-amd64-dbg - Debugging symbols for Linux 4.4.0-trunk-amd64
linux-image-4.4.0-trunk-rt-amd64 - Linux 4.4 for 64-bit PCs, PREEMPT_RT
linux-image-4.4.0-trunk-rt-amd64-dbg - Debugging symbols for Linux 4.4.0-trunk-rt-amd64

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

apt-get install linux-image-3.16.0-4-amd64

Чтобы обновить ядро Debian из backports, выполните команду ниже в которой укажите название пакета с нужной версией ядра:

apt-get install -t jessie-backports linux-headers-linux-image-4.3.0-0.bpo.1-amd64

Для обновления ядра Debian до самой свежей версии, которая доступна репозиториях, необходимо запустить установку из experimental:

apt-get -t experimental install linux-image-4.4.0-trunk-amd64

После о обновления ядра Debian необходимо перезагрузить систему. Чтобы проверить версию ядра и просмотреть лог ошибок выполните команды ниже:

uname -a
dmesg | egrep -i --color 'errors|critical|failed'

У особо любопытных может возникнуть вопрос, по поводу пакетов с индексом rt. Это ядро реального времени или его еще называют realtime-версией ядра Linux.

Отзыв на микро-сервер от Kimsufi

Хочу поделится опытом использования сервиса Kimsufi от компании OVH. Если вы еще не знакомы с этой компанией, OVH является крупнейшим в мире хостинг-провайдером. У хостера несколько сотен тысяч серверов во Франции и Канаде. Про OVH я узнал из рекомендаций. В первую очередь их хвалят за качество и низкие цены.

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

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

Изначально планировалось заказать сервер на базе процессора Atom N2800/4GB RAM/1TB HDD, из-за высокого спроса мне пришлось заказать похожую конфигурацию на базе SSD 40GB. На будущее дам совет. Если в данный момент нет нужной конфигурации, попробуйте заказать сервер в выходной день.

Всего сервер обошелся мне в 11$, плюс дополнительно 14$ за установку. Через час сервер был готов, на почту пришла информация о тестировании сервера и параметры доступа к ssh. При установке системы из образов OVH, на работе сервер не пускал меня по ssh. Причину я не выяснил, но проблема была решена после самостоятельной установки Debian.

Следует отметить, что кроме достоинства в виде низкой цены, Kimsufi есть множество недостатков. Каждому серверу выдают по одному IPv4 и IPv6 адресу и заказать дополнительный ip вы не сможете. Есть ограничения по объему и скорости трафика.

Неудобство создает отсутствие KVM консоли. Установить систему можно только из списка доступных образов, но если поизвращаться, можно установить Debian/Ubuntu через Debootstrap или накатить любую систему с помощью утилиты dd. Для этого необходимо загрузить сервер в режиме восстановления.

Выкладываю лог SMART:

smartctl 6.4 2014-10-07 r4002 [x86_64-linux-3.14.32-xxxx-std-ipv6-64-rescue] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Intel 320 Series SSDs
Device Model:     INTEL SSDSA2CT040G3
Serial Number:    CVPR130107A8040AGN
LU WWN Device Id: 5 001517 959613165
Firmware Version: 4PC10362
User Capacity:    40,020,664,320 bytes [40.0 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Wed Feb 17 10:56:50 2016 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity
					was never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever 
					been run.
Total time to complete Offline 
data collection: 		(    1) seconds.
Offline data collection
capabilities: 			 (0x75) SMART execute Offline immediate.
					No Auto Offline data collection support.
					Abort Offline collection upon new
					command.
					No Offline surface scan supported.
					Self-test supported.
					Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine 
recommended polling time: 	 (   1) minutes.
Extended self-test routine
recommended polling time: 	 (   1) minutes.
Conveyance self-test routine
recommended polling time: 	 (   1) minutes.
SCT capabilities: 	       (0x003d)	SCT Status supported.
					SCT Error Recovery Control supported.
					SCT Feature Control supported.
					SCT Data Table supported.

SMART Attributes Data Structure revision number: 5
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  3 Spin_Up_Time            0x0020   100   100   000    Old_age   Offline      -       0
  4 Start_Stop_Count        0x0030   100   100   000    Old_age   Offline      -       0
  5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       16398
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       65
170 Reserve_Block_Count     0x0033   100   100   010    Pre-fail  Always       -       0
171 Program_Fail_Count      0x0032   100   100   000    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   000    Old_age   Always       -       0
183 SATA_Downshift_Count    0x0030   100   100   000    Old_age   Offline      -       0
184 End-to-End_Error        0x0032   100   100   090    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
192 Unsafe_Shutdown_Count   0x0032   100   100   000    Old_age   Always       -       64
199 CRC_Error_Count         0x0030   100   100   000    Old_age   Offline      -       0
225 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       21000
226 Workld_Media_Wear_Indic 0x0032   100   100   000    Old_age   Always       -       527
227 Workld_Host_Reads_Perc  0x0032   100   100   000    Old_age   Always       -       80
228 Workload_Minutes        0x0032   100   100   000    Old_age   Always       -       983880
232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0032   100   100   000    Old_age   Always       -       0
241 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       21000
242 Host_Reads_32MiB        0x0032   100   100   000    Old_age   Always       -       87967

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Offline             Completed without error       00%     16398         -
# 2  Reserved (0x08)     Completed without error       10%     16228         -
# 3  Offline             Completed without error       10%     16225         -
# 4  Offline             Completed without error       10%     16225         -
# 5  Reserved (0x80)     Completed without error       10%     11543         -
# 6  Reserved (0x80)     Completed without error       10%     11540         -
# 7  Reserved (0x80)     Completed without error       10%     11540         -
# 8  Reserved (0x38)     Completed without error       10%     11482         -
# 9  Offline             Completed without error       10%     11479         -
#10  Vendor (0x70)       Completed without error       10%     11479         -
#11  Offline             Completed without error       10%        14         -
#12  Vendor (0xf8)       Completed without error       10%         1         -
#13  Vendor (0xf8)       Completed without error       10%         1         -

SMART Selective self-test log data structure revision number 0
Note: revision number not 1 implies that no selective self-test has ever been run
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Тест скорости записи:

root@kimsufi:~# dd if=/dev/zero of=/tmp/tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 23.2924 s, 46.1 MB/s

Тест скорости чтения:

root@kimsufi:~# dd if=/tmp/tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 5.28607 s, 203 MB/s

Как видите на сервере установлен SSD Intel 320, анонсированный в 2011 году. Диск сильно устарел и имеет низкие скоростные показатели. Это все наталкивает на мысль отдать предпочтение серверу с HDD на 1TB.

Тест производительности UnixBench:

4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        6990123.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1012.6 MWIPS (9.8 s, 7 samples)
Execl Throughput                                766.1 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        205392.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           57849.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        512877.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                              618230.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  44671.2 lps   (10.0 s, 7 samples)
Process Creation                               2147.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1939.9 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    634.4 lpm   (60.1 s, 2 samples)
System Call Overhead                        1087567.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    6990123.7    599.0
Double-Precision Whetstone                       55.0       1012.6    184.1
Execl Throughput                                 43.0        766.1    178.2
File Copy 1024 bufsize 2000 maxblocks          3960.0     205392.1    518.7
File Copy 256 bufsize 500 maxblocks            1655.0      57849.3    349.5
File Copy 4096 bufsize 8000 maxblocks          5800.0     512877.5    884.3
Pipe Throughput                               12440.0     618230.1    497.0
Pipe-based Context Switching                   4000.0      44671.2    111.7
Process Creation                                126.0       2147.6    170.4
Shell Scripts (1 concurrent)                     42.4       1939.9    457.5
Shell Scripts (8 concurrent)                      6.0        634.4   1057.4
System Call Overhead                          15000.0    1087567.9    725.0
                                                                   ========
System Benchmarks Index Score                                         384.5

------------------------------------------------------------------------
Benchmark Run: Wed Feb 17 2016 15:15:17 - 15:43:22
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       19389920.4 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3642.8 MWIPS (9.8 s, 7 samples)
Execl Throughput                               3043.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        183580.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           54375.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        519889.3 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1181437.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 199232.0 lps   (10.0 s, 7 samples)
Process Creation                               6534.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5150.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    672.7 lpm   (60.3 s, 2 samples)
System Call Overhead                        2702706.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   19389920.4   1661.5
Double-Precision Whetstone                       55.0       3642.8    662.3
Execl Throughput                                 43.0       3043.0    707.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     183580.0    463.6
File Copy 256 bufsize 500 maxblocks            1655.0      54375.5    328.6
File Copy 4096 bufsize 8000 maxblocks          5800.0     519889.3    896.4
Pipe Throughput                               12440.0    1181437.3    949.7
Pipe-based Context Switching                   4000.0     199232.0    498.1
Process Creation                                126.0       6534.7    518.6
Shell Scripts (1 concurrent)                     42.4       5150.3   1214.7
Shell Scripts (8 concurrent)                      6.0        672.7   1121.2
System Call Overhead                          15000.0    2702706.3   1801.8
                                                                   ========
System Benchmarks Index Score                                         795.3

Что касается реальных задач, скорость работы WordPress примерно в 5-7 раз ниже по сравнению c самым дешевым тарифом на VPS у OVH. Это дополнительный аргумент в пользу сервера диском на 1TB.

Вывод будет краток. Я не вижу смысла заказывать выделенный сервер за 11$, который значительно хуже самого дешевого VPS за 3.5$ от OVH. Для сравнения вы можете ознакомится с результатами теста UnixBench на VPS от OVH. Если вы остро нуждаетесь в дешевом выделенном сервере, я могу посоветовать обратить внимание на online.net.

Primary script unknown while reading response header from upstream

Дата: 17.02.2016Метки:

Собирал на днях PHP 7 для своего VPS, на котором крутится этот блог. Ради интереса решил провести небольшой эксперимент и максимально отключить все неиспользуемые WordPress компоненты PHP. В процессе сборки я стараюсь всегда отключать все неиспользуемые модули. В этот раз решил дополнительно указал параметры, которые ранее никогда не использовал:

--disable-fileinfo
--disable-json
--disable-posix

После того как я запустил процесс php-fpm, я обнаружил, что сайт не работает. Не могу сказать, что я был сильно удивлен, поэтому решил сразу проверить логи nginx. В логах повторялась следующая ошибка:

"Primary script unknown" while reading response header from upstream.

Благо эту напасть удалось быстро победить. Для того чтобы завести PHP, необходимо указать в секции location ~ \.php$ директорию root, которая будет указывать на расположение файлов php. Если вы столкнулись с подобной ошибкой, убедитесь что в конфиге виртуального хоста nginx присутствуют следующие директивы:

location ~ \.php$ {
    root /usr/share/nginx/html;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    ...
}

Автоматический перезапуск сервиса в Linux

Дата: 16.02.2016Метки:

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

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

Для начала нам необходимо выяснить полный путь к скрипту, который выполняет запуск сервиса. В debian/Ubuntu скрипты запуска сервисов расположены в каталоге /etc/init.d/. Можно самостоятельно найти нужный скрипт или выполнить команду:

$ find /etc/init.d -name service_name
/etc/init.d/service_name

Выполните команду crontab -e, а затем добавьте новое задание в cron:

*/1 * * * * ps -A | grep service_name || /etc/init.d/service_name restart

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

Не выполняются команды из rc.local

Дата: 29.01.2016Метки:

В большинстве дистрибутивов Linux есть штатная возможность выполнить произвольные команды в конце процесса загрузки. Для автоматического запуска необходимо указать путь к программе или скрипту в содержимом файла rc.local.

Если у вас не выполняются команды из rc.local, то одной из возможных причин может быть отсутствие прав для запуска скрипта. Если сразу после установки в CentOS не работает автозагрузка, то скорее всего причина именно в этом. Для исправления просто выполните команду:

chmod +x /etc/rc.d/rc.local

Сборка ядра Linux в Debian

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

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

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

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

apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc kernel-package

Теперь нам необходимо загрузить исходники ядра Linux. Для примера возьмем ядро Linux 4.4, которое я загружаю с сайта kernel.org:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz

Распаковываем архив с исходниками ядра и переходим в каталог с файлами:

tar xvf linux-4.4.tar.xz
cd linux-4.4

Копируем существующий конфигурационный файл ядра Linux:

cp /boot/config-$(uname -r) .config

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

make menuconfig

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

make-kpkg clean

Запускаем процесс компиляции:

fakeroot make-kpkg --initrd --append-to-version=-vanilla --revision=r1 kernel_image kernel_headers -j 5

В качестве параметров укажите ревизию ядра --revision и количество ядер процессора +1 -j 5, которые будет задействованы в процессе сборки.
После того как будет собран deb-пакет, установите ядро командой:

dpkg -i linux-headers-4.4.0_1.0_amd64.deb
dpkg -i linux-image-4.4.0_1.0_amd64.deb

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

uname -a

Будет не лишним проверить наличие ошибок:

dmesg | egrep -i --color 'error|critical|failed'

Для удаления старого ядра Linux, выполните команду:

apt-get remove linux-image-(unused_version_number)

Установка PHP 7 в Ubuntu

Дата: 24.01.2016Метки: ,

В этой статье я опишу процесс установка PHP 7 в Ubuntu из PPA-репозитория. Эта заметка будет написана в формате небольшого мануала, поэтому я постараюсь кратко изложить техническую техническую сторону процесса. Дополнительно, в предыдущих моих постах вы можете прочить как установить PHP 7 в Debian и CentOS. А еще есть описание процесса установки PHP 7 из исходников в Debian, это вариант более трудоемкий, но зато имеет очевидные преимущества с точки зрения оптимизации.

Установка PHP 7 в Ubuntu

На данный момент PHP 7 официально не доступен для установки в Ubuntu. Но мы можем установить PHP 7 в Ubuntu используя PPA — персональный репозиторий apt, размещенный на сайте Launchpad. С помощью PPA сторонние разработчики имеют возможность создавать и распространять пакеты для Ubuntu за пределами официальных каналов.

С помощью команды ниже добавьте репозиторий PHP 7 в Ubuntu:

add-apt-repository ppa:ondrej/php

После установки PPA, обновите локальный кэш пакетов:

apt-get update

Теперь у нас есть доступ к новым пакетам, мы можем выполнить установку PHP 7 в Ubuntu. В этой статье я опишу процесс настройки PHP 7 для использования его в связке с веб-сервером Nginx. Для этого нам потребуется установить PHP-FPM:

apt-get install php7.0-fpm

Если ваше скрипты используют в процессе работы MySQL, выполните команду:

apt-get install php7.0-mysql

Настройка PHP 7 для работы с Nginx

Процессы PHP 7 и Nginx взаимодействуют между собой с помощью unix-сокета. По умолчанию в PHP 7 unix-сокет имеет следующее расположение:

/var/run/php/php7.0-fpm.sock

Откройте конфигурационный файл default в текстовом редакторе nano:

nano /etc/nginx/sites-enabled/default

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

server {
    listen 80 default_server;

    root /var/www/html;
    index index.php index.html;

    server_name _;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Закройте файл и сохраните изменения. Чтобы использовать новые настройки необходимо перезапустить Nginx:

nginx -t
service nginx restart

Проверка работы PHP 7

Чтобы проверить правильность установки и настройки PHP 7 в Ubuntu, в коневом каталоге сайта создайте файл:

nano /var/www/html/info.php

Следующего содержания:

<?php
phpinfo();
?>

Откройте файл в вашем браузере:

http://server_ip/info.php

Если вы правильно установили и настроили PHP 7 в Ubuntu, вы должны увидеть страницу содержащую информацию о его конфигурации.