Утилита top

Первые два столбика — номер процесса (PID) и имя пользователя, его запустившего (USER).

Следующие 2 столбца показывают, какой приоритет имеет процесс в данный момент (PR) и приоритет, присвоенный ему командой NICE (NI).

Информация, содержащаяся в других колонках, характеризует непосредственно уровень потребления ресурсов. Расшифровываются они следующим образом:

**VIRT — виртуальная память, которую использует процесс
**RES — физическая память, занятая данным процессом
**SHR — общий объем памяти, которую данный процесс делит с другими
**S — текущий статус процесса: R — running; S — sleeping, Z — zombie
**%CPU — процент используемого времени центрального процессора
**%MEM — процент ОЗУ, используемой процессом
**TIME+ — продолжительность работы процесса с момента запуска
**COMMAND — название команды (программы), которая инициировала процесс.

Расшифровка данных перед таблицей

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

Первая строчка (top) дает нам общее представление о загрузке системы. Здесь указано:

** текущее время
** up — продолжительность работы системы с момента запуска
** user — текущее количество пользователей системы
** load average — средняя загруженность системы одну минуту назад, пять и 15 соответственно.

Считается, что в норме данный показатель не должен превышать 1 для одноядерных процессоров. Соответственно, значение load average, равное количеству ядер, является предельным.

Вторая строка данных дает информацию об общем количестве процессов в системе, а также об их статусе: выполняемые (running), в ожидании (sleeping), приостановленные (stopped), zombie.

Далее идет информация о состоянии процессора (%Cpu), ОЗУ (Mem), SWAP.

Добавление столбцов и сортировка таблицы top

Теперь вы знаете, какая информация зашифрована в каждом столбце таблицы top. Как было отмечено в начале, базовая сортировка данных осуществляется по уровню использования времени ЦПУ, оно же %CPU. Чтобы выполнить в top сортировку по памяти (%MEM), достаточно ввести Shift+M в режиме работы команды top. Если интересует, какой из процессов дольше всего работает, нажмите Shift+T, и увидите интересующую информацию в колонке TIME+. Можно отсортировать процессы по их номеру (PID), набрав на клавиатуре Shift+N.

Чтобы вернуться к режиму сортировки по уровню потребления ресурсов процессора, воспользуйтесь комбинацией Shift+P.

Далеко не все способы сортировки можно задать с помощью «горячих клавиш». Например, для определения процессов, которые больше всего потребляют SWAP, используйте меню выбора полей, которое вызывается комбинацией Shift+F.

С помощью клавиш навигации находим SWAP (или любой другой нужный параметр), клавишей «d» закрепляем его добавление в общую таблицу команды top (в качестве подтверждения вашего выбора рядом появится символ «*»). Чтобы задать сортировку по SWAP, здесь же нажимаем «s» и выходим из меню (ESC). Готово!

Убедиться, что сортировка работает по заданному признаку, можно нажав «x». Колонка с соответствующим признаком будет подсвечена (выделена жирным шрифтом).

https://vps.ua/wiki/beginners/top-command/

 

image_pdfimage_print

Работа с диском

Есть жесткий диск, нужно добавить в систему.

Смотрим устройства в системе

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298,1G 0 disk
└─sda1 8:1 0 298,1G 0 part
sdb 8:16 0 149,1G 0 disk
└─sdb1 8:17 0 149,1G 0 part
sdc 8:32 0 1,8T 0 disk
├─sdc1 8:33 0 1G 0 part /boot
└─sdc2 8:34 0 1,8T 0 part
   ├─centos-root 253:0 0 20G 0 lvm /
   ├─centos-swap 253:1 0 2G 0 lvm [SWAP]
   └─centos-home 253:2 0 1,8T 0 lvm /home

Форматируем в xfs (создаем файловую систему)

# mkfs.xfs /dev/sdb
mkfs.xfs: /dev/sdb appears to contain a partition table (gpt).
mkfs.xfs: Use the -f option to force overwrite.
# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=9768182 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=39072726, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=19078, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

Проверяем

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298,1G 0 disk
└─sda1 8:1 0 298,1G 0 part
sdb 8:16 0 149,1G 0 disk
sdc 8:32 0 1,8T 0 disk
├─sdc1 8:33 0 1G 0 part /boot
└─sdc2 8:34 0 1,8T 0 part
  ├─centos-root 253:0 0 20G 0 lvm /
  ├─centos-swap 253:1 0 2G 0 lvm [SWAP]
  └─centos-home 253:2 0 1,8T 0 lvm /home

Автоматическое монтирование диска при старте системы

# nano /etc/fstab
/dev/sdb /home/data xfs defaults 0 0

LVM

Есть диск для мусора. Отформатировать в xfs и накатить LVM разбив на два раздела

Инициализируем его для работы LVM

$ sudo pvcreate /dev/sda

Чтобы посмотреть действительно ли были созданы физические тома LVM

$ sudo pvscan
PV /dev/sdc2 VG centos lvm2 [<1,82 TiB / 4,00 MiB free]
PV /dev/sda lvm2 [298,09 GiB]
Total: 2 [<2,11 TiB] / in use: 1 [<1,82 TiB] / in no VG: 1 [298,09 GiB]

Можно посмотреть физические LVM разделы с более подробными атрибутами,
такими как размер, общий размер, физический размер, свободное место

$ sudo pvdisplay
"/dev/sda" is a new physical volume of "298,09 GiB"
--- NEW Physical volume ---
PV Name /dev/sda
VG Name
PV Size 298,09 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2EKU2q-q4kq-o6ui-k75t-h5Km-1r6s-gfJiDx

PE Size — это размер одного блока LVM, по умолчанию он равен четырем мегабайтам, но это значение можно изменить.

СОЗДАНИЕ ГРУППЫ РАЗДЕЛОВ LVM

Группа томов — это не что иное, как пул памяти, который будет распределен между логическими томами и может состоять из нескольких физических разделов. После того как физические разделы инициализированы, вы можете создать из них группу томов (Volume Group, VG):

$ sudo vgcreate vg_box /dev/sda

Смотрим

$ sudo vgdisplay
--- Volume group ---
VG Name vg_box
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <298,09 GiB
PE Size 4,00 MiB
Total PE 76311
Alloc PE / Size 0 / 0
Free PE / Size 76311 / <298,09 GiB
VG UUID 5eSdwC-7y8N-vf3l-QQA7-Trpu-fcSj-3sAFx3

--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <1,82 TiB
PE Size 4,00 MiB
Total PE 476675
Alloc PE / Size 476674 / <1,82 TiB
Free PE / Size 1 / 4,00 MiB
VG UUID uQKzpe-GhWW-rr3C-xSGG-cTyw-VLBy-L1Sftb

СОЗДАНИЕ ЛОГИЧЕСКИХ ТОМОВ LVM

Теперь все готово, чтобы создать логические LVM разделы. Для этого будем использовать команду lvcreate и создадим логический раздел размером 240000 Mb, или 60000 блоков LVM (1 блок 4000Kb):

$ sudo lvcreate -l 60000 -n lv_box1 vg_box
Logical volume "lv_box1" created.

Посмотреть список доступных логических разделов LVM можно по аналогии
с предыдущими разделами с помощью команды lvdisplay:

$ sudo lvdisplay
--- Logical volume ---
LV Path /dev/vg_box/lv_box1
LV Name lv_box1
VG Name vg_box
LV UUID 2rAl8O-wMo2-Q3X6-zz48-Pdxy-E3Gk-Qros51
LV Write Access read/write
LV Creation host, time tst.tst-amo.net.ua, 2018-08-19 18:56:33 +0300
LV Status available
# open 0
LV Size <234,38 GiB
Current LE 60000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3

Теперь, когда раздел создан, мы можем работать с ним как с обычным разделом.
Например, отформатируем его в файловую систему ext4, а затем примонтируем в /mnt:

$ sudo mkfs.ext4 /dev/vg_box/lv_box1
$ sudo mount /dev/vg_box/lv_box1 /mnt/
# umount /mnt

ТИПЫ РАЗДЕЛОВ

lvm разделы могут быть трех типов:

  • Линейные разделы (linear volume)
  • Полосные разделы (Striped Volume)
  • Зеркалированные разделы (Mirrored Volume)

Линейные разделы — это обычные LVM тома, они могут быть созданы как их одного, так и нескольких физических дисков. Например, если у вас есть два диска по 2 гигабайта, то вы можете их объединить и в результате получите один раздел LVM linux, размером 4 гигабайта. По умолчанию используются именно линейные LVM разделы.

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

Для этого нужно задать количество полос записи с помощью опции -i, а также размер полосы опцией -l. Количество полос не должно превышать количества физических дисков. Например:

$ lvcreate -L 1G -i2 -I64 -n lv_stripe vol_grp1

Зеркалированный том позволяет записывать данные одновременно на два устройства. Когда данные пишутся на один диск, они сразу же копируются на другой. Это позволяет защититься от сбоев одного из дисков. Если один из дисков испортится, то разделы LVM просто станут линейными и все данные по-прежнему будут доступны. Для создания такого раздела LVM Linux можно использовать команду:

$ sudo lvcreate -L 200M -m1 -n lv_mirror vol_grp1

УДАЛИТЬ LVM РАЗДЕЛ

Вы можете не только настроить lvm тома изменяя их размер и атрибуты, но и удалить lvm раздел, если он вам больше не нужен. Это делается с помощью lvm команды lvremove:

# lvremove /dev/vg_box/lv_box1

Или полностью группу:

# vgremove /dev/vg_box
# lvdisplay /dev/vg_box/lv_box1

Чтобы изменить размер lvm используйте команду lvextend. Например, lvm увеличим размер диска из 80 до 100 мегабайт:

$ sudo lvextend -L100 /dev/vol_grp1/logical_vol1
Extending logical volume logical_vol1 to 100.00 MB
Logical volume logical_vol1 successfully resize

Также вы можете увеличить размер lvm, использовав знак +:

$ sudo lvextend -L+100 /dev/vol_grp1/logical_vol1
Extending logical volume logical_vol1 to 200.00 MB
Logical volume logical_vol1 successfully resized

Точно так же можно выполнить уменьшение lvm раздела с помощью знака -.
https://wiki.russianfedora.pro/index.php?title=Уменьшение_размера_LVM_раздела

lvreduce урезает размер LVM раздела. Работает она следующим образом, параметр -L указывает на изменение размера раздела, здесь же есть 2 варианта: указание размера и относительное значение, со знаком + или -. Например, -L 83G урежет размер до 83G(то бишь lvm_root станет 83Gb вместо 98Gb), соответственно -L -15G или -L +15G уменьшит или увеличит размер на указанный (lvm_root станет 98G минус 15G или 98G плюс 15G).

Уменьшение тома на 2Gb

# lvreduce -L -2G /dev/vg_box/lv_box2

# lvreduce -r -L -2G /dev/vg_box/lv_box2

Наличие опции -r указывает, что надо также изменить размер файловой системы, без неё данные будут утеряны (не касается xfs).

Проверить наличие свободного места

# vgs vg_box
VG #PV #LV #SN Attr VSize VFree
vg_box 1 2 0 wz--n- <298,09g 0

Если xfs не основана на LVM нужно использовать

# xfs_growfs <mount_point> -D <size>

-D size – задается выборочный размер, без этой опции размер будет задан максимальный поддерживаемый устройством.

image_pdfimage_print

lm_sensors – смотрим температуру CPU

$ sudo yum install lm_sensors

Запускаем обнаружение

$ sudo sensors-detect
# sensors-detect revision 3.4.0-4 (2016-06-01)
# System: Gigabyte Technology Co., Ltd. G41M-Combo
# Kernel: 3.10.0-862.11.6.el7.x86_64 x86_64
# Processor: Intel(R) Celeron(R) CPU E1400 @ 2.00GHz (6/15/13)

This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no): yes
Silicon Integrated Systems SIS5595... No
VIA VT82C686 Integrated Sensors... No
VIA VT8231 Integrated Sensors... No
AMD K8 thermal sensors... No
AMD Family 10h thermal sensors... No
AMD Family 11h thermal sensors... No
AMD Family 12h and 14h thermal sensors... No
AMD Family 15h thermal sensors... No
AMD Family 16h thermal sensors... No
AMD Family 15h power sensors... No
AMD Family 16h power sensors... No
Intel digital thermal sensor... Success!
(driver `coretemp')
Intel AMB FB-DIMM thermal sensor... No
Intel 5500/5520/X58 thermal sensor... No
VIA C7 thermal sensor... No
VIA Nano thermal sensor... No


Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no):
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... No
Trying family `ITE'... Yes
Found `ITE IT8720F Super IO Sensors' Success!
(address 0x290, driver `it87')
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor/ITE'... No
Trying family `SMSC'... No
Trying family `VIA/Winbond/Nuvoton/Fintek'... No
Trying family `ITE'... No

Some systems (mainly servers) implement IPMI, a set of common interfaces
through which system health data may be retrieved, amongst other things.
We first try to get the information from SMBIOS. If we don't find it
there, we have to read from arbitrary I/O ports to probe for such
interfaces. This is normally safe. Do you want to scan for IPMI
interfaces? (YES/no): yes
Probing for `IPMI BMC KCS' at 0xca0... No
Probing for `IPMI BMC SMIC' at 0xca8... No

Some hardware monitoring chips are accessible through the ISA I/O ports.
We have to write to arbitrary I/O ports to probe them. This is usually
safe though. Yes, you do have ISA I/O ports even if you do not have any
ISA slots! Do you want to scan the ISA I/O ports? (yes/NO):

Lastly, we can probe the I2C/SMBus adapters for connected hardware
monitoring devices. This is the most risky part, and while it works
reasonably well on most systems, it has been reported to cause trouble
on some systems.
Do you want to probe the I2C/SMBus adapters now? (YES/no):
Using driver `i2c-i801' for device 0000:00:1f.3: Intel 82801G ICH7
Module i2c-dev loaded successfully.

Next adapter: i915 gmbus ssc (i2c-0)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus vga (i2c-1)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus panel (i2c-2)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus dpc (i2c-3)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus dpb (i2c-4)
Do you want to scan it? (yes/NO/selectively):

Next adapter: i915 gmbus dpd (i2c-5)
Do you want to scan it? (yes/NO/selectively):

Next adapter: SMBus I801 adapter at 0500 (i2c-6)
Do you want to scan it? (yes/NO/selectively):

Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `it87':
* ISA bus, address 0x290
Chip `ITE IT8720F Super IO Sensors' (confidence: 9)

Driver `coretemp':
* Chip `Intel digital thermal sensor' (confidence: 9)

Do you want to overwrite /etc/sysconfig/lm_sensors? (YES/no): yes
Unloading i2c-dev... OK

Смотрим показания:

# sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +40.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +43.0°C (high = +86.0°C, crit = +100.0°C)

it8720-isa-0290
Adapter: ISA adapter
in0: +1.17 V (min = +0.00 V, max = +4.08 V)
in1: +1.95 V (min = +0.00 V, max = +4.08 V)
in2: +3.34 V (min = +0.00 V, max = +4.08 V)
+5V: +2.91 V (min = +0.00 V, max = +4.08 V)
in4: +0.40 V (min = +0.00 V, max = +2.10 V)
in5: +3.04 V (min = +0.00 V, max = +4.08 V)
in6: +2.11 V (min = +0.00 V, max = +4.08 V)
5VSB: +2.96 V (min = +0.00 V, max = +4.08 V)
Vbat: +3.25 V
fan1: 2303 RPM (min = 0 RPM)
fan2: 2824 RPM (min = 0 RPM)
temp1: -55.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: -2.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: +27.0°C (low = +127.0°C, high = +127.0°C) sensor = thermal diode
cpu0_vid: +1.325 V
intrusion0: ALARM

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

# watch sensors

Every 2,0s: sensors Sat Aug 18 07:43:29 2018

coretemp-isa-0000
Adapter: ISA adapter
Core 0: +40.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +43.0°C (high = +86.0°C, crit = +100.0°C)

it8720-isa-0290
Adapter: ISA adapter
in0: +1.17 V (min = +0.00 V, max = +4.08 V)
in1: +1.95 V (min = +0.00 V, max = +4.08 V)
in2: +3.34 V (min = +0.00 V, max = +4.08 V)
+5V: +2.91 V (min = +0.00 V, max = +4.08 V)
in4: +0.40 V (min = +0.00 V, max = +2.10 V)
in5: +3.04 V (min = +0.00 V, max = +4.08 V)
in6: +2.11 V (min = +0.00 V, max = +4.08 V)
5VSB: +2.96 V (min = +0.00 V, max = +4.08 V)
Vbat: +3.25 V
fan1: 2311 RPM (min = 0 RPM)
fan2: 2824 RPM (min = 0 RPM)
temp1: -55.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: -2.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: +27.0°C (low = +127.0°C, high = +127.0°C) sensor = thermal diode
cpu0_vid: +1.325 V
intrusion0: ALARM

 

image_pdfimage_print

Mysqltuner – оптимизация MySQL

Mysqltuner — это perl-скрипт, который анализирует статистику работы Mysql и выдает свои рекомендации по оптимизации настроек Mysql сервера.

# yum -y install mysqltuner

Запускаем:

# mysqltuner --user root --pass rootpassword

Особое внимание стоит уделить строкам, помеченным символами [!!] и секции Recommendations.

Параметры указанные после строки Variables to adjust нужно изменить в файле my.cnf, в соответствии с рекомендациями Mysqltuner. Если указанного параметра нет в файле my.cnf, то его следует дописать.

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries which have no LIMIT clause
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
tmp_table_size (> 64M)
max_heap_table_size (> 64M)

Согласно рекомендациям правим:

/etc/my.cnf

После внесения изменений в файл my.cnf нужно перезагрузить Mysql-сервер:

# systemctl restart mariadb

После изменения конфигурации Mysql-сервер должен проработать минимум 24 часа без перезагрузок. Затем, можно снова запустить утилиту Mysqltuner и проанализировать вывод статистики. Таким образом, можно привести конфигурационный файл my.cnf и работу Mysql-сервера, соответственно, к оптимальному состоянию.

Мой пример конфига.

# uname -rs
Linux 3.10.0-862.11.6.el7.x86_64
# free -m
total used free shared buff/cache available
Mem: 2811 2086 91 9 633 540
Swap: 2047 0 2047
# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

## WordPress/Owncloud
max_connections = 64
wait_timeout = 22222
interactive_timeout = 22222
table_open_cache = 800
open_files_limit = 65535
thread_cache_size = 32
thread_concurrency = 8
query_cache_type = 1
query_cache_size = 32M
query_cache_limit = 1M
key_buffer_size = 24M
key_cache_division_limit=70
join_buffer_size = 512M
tmp_table_size = 128M
max_heap_table_size = 128M

# INNODB
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:10M:autoextend:max:3999M
innodb_flush_method = O_DIRECT

# MYISAM
myisam_sort_buffer_size = 32M

#Logging
slow_query_log = 1
slow_query_log_file = /var/log/mariadb/mysql-slow.log

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
# mysqltuner
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password: >> MySQLTuner 1.6.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.5.56-MariaDB
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +Aria +BLACKHOLE +CSV +FEDERATED +InnoDB +MRG_MYISAM
[--] Data in MyISAM tables: 42K (Tables: 10)
[--] Data in InnoDB tables: 39M (Tables: 87)
[!!] Total fragmented tables: 3

-------- Security Recommendations -------------------------------------------
[OK] There is no anonymous account in all database users
[OK] All database users have passwords assigned
[!!] There is not basic password file list !

-------- Performance Metrics -------------------------------------------------
[--] Up for: 44m 53s (43K q [16.302 qps], 748 conn, TX: 34M, RX: 8M)
[--] Reads / Writes: 87% / 13%
[--] Binary logging is disabled
[--] Total buffers: 840.0M global + 514.7M per thread (64 max threads)
[!!] Maximum reached memory usage: 16.4G (597.34% of installed RAM)
[!!] Maximum possible memory usage: 33.0G (1201.42% of installed RAM)
[OK] Slow queries: 0% (0/43K)
[OK] Highest usage of available connections: 48% (31/64)
[OK] Aborted connections: 0.53% (4/748)
[OK] Query cache efficiency: 40.8% (24K cached / 59K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 627 sorts)
[!!] Temporary tables created on disk: 26% (18 on disk / 67 total)
[OK] Thread cache hit rate: 95% (31 created / 748 connections)
[OK] Table cache hit rate: 122% (140 open / 114 opened)
[OK] Open file limit used: 7% (72/1K)
[OK] Table locks acquired immediately: 100% (16K immediate / 16K locks)


-------- MyISAM Metrics -----------------------------------------------------
[!!] Key buffer used: 18.7% (4M used / 25M cache)
[OK] Key buffer size / total MyISAM indexes: 24.0M/136.0K
[!!] Read Key buffer hit rate: 75.0% (32 cached / 8 reads)

-------- InnoDB Metrics -----------------------------------------------------
[--] InnoDB is enabled.
[OK] InnoDB buffer pool / data size: 512.0M/39.7M
[OK] InnoDB buffer pool instances: 1
[!!] InnoDB Used buffer: 5.93% (1943 used/ 32767 total)
[OK] InnoDB Read buffer efficiency: 99.50% (358717 hits/ 360535 total)
[!!] InnoDB Write buffer efficiency: 0.00% (0 hits/ 1 total)
[OK] InnoDB log waits: 0.00% (0 waits / 4616 writes)

-------- AriaDB Metrics -----------------------------------------------------
[--] AriaDB is disabled.

-------- Replication Metrics -------------------------------------------------
[--] No replication slave(s) for this server.
[--] This is a standalone server..

-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries which have no LIMIT clause
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
tmp_table_size (> 128M)
max_heap_table_size (> 128M)
image_pdfimage_print

Доступ к устройству по telnet, ssh

1.Установка пароля на доступ к привилегированному режиму.
Для установки пароля на доступ к привилегированному режиму перейдем в режим глобальной конфигурации и установим пароль.

router#config terminal 
router(config)#enable secret cisco 
router(config)#enable password ciscocisco

Команда enable secret создает зашифрованный пароль
Команда enable password хранит пароль в открытом виде

При использовании одновременно двух команд приоритет отдается enable secret, а пароль в enable password не используется, так же не рекомендуется использовать одинаковый пароль в этих командах.

2.Установка пароля на доступ устройству через консольный порт.

router#configure terminal 
router(config)#line console 0 
router(config-line)#password cisco 
router(config-line)#login 
router(config-line)#end

3.Установка пароля на доступ устройству через telnet.

router#configure terminal 
router(config)#line vty 0 15 
router(config-line)#password cisco 
router(config-line)#login

В данном случае пароль установлен на все 16 линий, если нужно то можно менять диапазон, например line vty 0 4.

Смотрим что у нас получилось. Ниже приведены интересующие нас строчки из running-config

router#show running-config 
! 
enable secret 5 $1$tasv$QdGGQJIj.PEPk3sz66NMe/ 
enable password ciscocisco 
!   
!
line con 0 
exec-timeout 0 0 
privilege level 15 
password cisco 
logging synchronous 
login line aux 0 
exec-timeout 0 0 
privilege level 15 
logging synchronous 
line vty 0 4 
 password cisco 
login line vty 5 15 
 password cisco 
 login
!

Проверяем подключение

4. Включаем шифрование паролей.
Как мы видим пароли в конфигурации лежат в открытом виде, зашифруем их для этого используем команду service password-encryption в режиме глобальной конфигурации.

router#configure terminal 
router(config)#service password-encryption

Смотрим что получилось

router#show running-config 
! 
enable secret 5 $1$tasv$QdGGQJIj.PEPk3sz66NMe/ 
enable password 7 00071A150754080F1C2243 
! 
line con 0 
exec-timeout 0 0 
privilege level 15 
password 7 1511021F0725 
logging synchronous 
login 
line vty 0 4 
password 7 110A1016141D 
login line vty 5 15 
password 7 110A1016141D 
login 
!

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

5. Настройка доступа по ssh

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

Для генерации ключа ssh необходимо задать ip domain-name.

router(config)#ip domain-name test.dom

Генерируем ключ ssh, размер ключа указываем максимально возможный 2048

router(config)#crypto key generate rsa general-keys modulus 2048

Создаем пару логин пароль

router(config)#username admin secret cisco

В конфигурации линий vty 0-15 покажем что логин берется из локальной базы и входящий протокол будет ssh

router(config)#line vty 0-15 
router(config-line)#login local 
router(config-line)#transport input ssh

По умолчанию CISCO включает версию ssh 1.99

router#show ip ssh 
SSH Enabled - version 1.99 
Authentication timeout: 120 secs; Authentication retries: 3

изменим её на ssh 2 командой

router#config t 
router(config)#ip ssh version 2

проверяем

router#show ip ssh 
SSH Enabled - version 2.0 
Authentication timeout: 120 secs; Authentication retries: 3

Пробуем подключится

Для большей безопасности на вход line vty можно повесить стандартный access-list со списком разрешенных хостов.

Создаем стандартный access-list 2 разрешающий хост 10.1.2.3, остальные он запрещает по умолчанию.

router#configure terminal 
router(config)#access-list 2 permit 10.1.2.3

Весим его на вход line vty 0 15

router#configure terminal 
router(config)#line vty 0 15 
router(config-line)#access-class 2 in

Проверяем

image_pdfimage_print

Let’sencrypt

standolone

# service nginx stop
# certbot certonly --dry-run -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua

Программа должна отчитаться  об успешной работе:

IMPORTANT NOTES:
- The dry run was successful.

Запускаем вчистовую:

# certbot certonly -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua

После запускаем и проверяем:

# service nginx start
# service nginx status

webroot

Этот вариант не предполагает остановку сервиса nginx.

Чтобы не писать каждый раз длинную строку из опций, а еще лучше — не вспоминать о них, запишем основные настройки в файл конфигурации, который certbot ожидает найти в /etc/letsencrypt/cli.ini:

authenticator = webroot
webroot-path = /home/www/
post-hook = service nginx reload
text = True

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

Также нам нужно мягко перезагрузить nginx (без перерыва в обслуживании) при успешном обновлении сертификатов. Ничего не мешает в этот же момент перезапускать и другие сервисы вроде Postfix, использующие полученные сертификаты. Команды указываются через точку с запятой.

Ожидается что certbot будет создавать необходимые для проверки прав на домен файлы в подкаталогах ниже по иерархии к указанному. Вроде таких:

/home/www/.well-known/acme-challenge/example.html

Эти файлы должны будут быть доступны из сети на целевом домене по крайней мере по HTTP:

http://tst-amo.net.ua/.well-known/acme-challenge/example.html

Для следующих проверок создадим какой-то такой файл:

mkdir -p /home/www/.well-known/acme-challenge
chown -R nginx:www-data /home/www/.well-known/
echo Success > /home/www/.well-known/acme-challenge/example.html

Регистрацию нужно сделать только один раз:

certbot register --email postmaster@tst-amo.net.ua

В общем случае для получения сертификата необходимо во всех блоках server добавить следующий блок до других блоков location:

location /.well-known {
    root /home/www/;
}

Понятно, что вписывать для каждого сайта такой блок явно — это моветон, потому создадим файл /etc/nginx/acme.conf с содержанием блока выше.

# cat /etc/nginx/acme.conf 
location /.well-known {
    root /home/www/;
}

Затем для каждого домена и поддомена, для которых нужно получить сертификаты, в блоке server перед всеми блоками location укажем:

include acme.conf;

Хосты-редиректоры (например, с голого домена на www) можно пропустить. ACME сервер обязан учитывать стандартную переадресацию.

Перезагрузим nginx и проверим что наш тестовый файл виден:

# service nginx reload
# curl -L http://tst-amo.net.ua/.well-known/acme-challenge/example.html
Success

После проверки лучше удалить тестовый файл — certbot любит удалять за собой всё лишнее, а такой файл будет мешать и вызывать сообщение об ошибке (Unable to clean up challenge directory).

rm /home/www/.well-known/acme-challenge/example.html

Получаем сертификаты.

Если нужно добавить поддомен или домен в сертификат

Если вы вдруг забыли указать поддомен www, или вам нужно добавить другой домен или поддомен в сертификат (которых может быть до 100 в одном сертификате), то это легко сделать после получения сертификата. Просто запустите команду еще раз, добавив требуемое имя:

# certbot certonly -d tst-amo.net.ua -d www.tst-amo.net.ua -d mail.tst-amo.net.ua -d cloud.tst-amo.net.ua

Вам будет безальтернативно предложено добавить этот домен в сертификат. Если хочется избежать вопросов, то можно сразу указать одобряющий такое поведение ключ:

# certbot certonly --expand -d example.com -d www.example.com -d shop.example.com

Продление

Для автоматизации продления сертификатов добавим в crontab от root одну лишь строчку (sudo crontab -e):

33 */12 * * * certbot renew --quiet --allow-subset-of-names

Согласно рекомендаций Let’s Encrypt следует пытаться обновить сертификаты два раза в день. Делать это нужно в случайным образом выбранную минуту того часа, а значит вам нужно заменить 33 в этой строке на другое число в диапазоне между 0 и 59. Либо вы можете поступить так как это делается в /etc/cron.d/certbot.

В этой команде ключ –allow-subset-of-names нужен чтобы Certbot пытался получить сертификаты для частичного набора доменов.

 

https://habr.com/post/318952/
https://www.digitalocean.com/community/questions/letsencrypt-failed-authorization-process
https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html

image_pdfimage_print

Windows 7 share printer

Для этого заходим в панель управления Windows, в раздел: Панель управления\Сеть и Интернет\Центр управления сетями и общим доступом.

Здесь нужно открыть ссылку в левом меню “Изменить дополнительные параметры общего доступа”.

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

Далее сохраняете настройки и переходите в другой раздел панели управления — раздел «Панель управления\Оборудование и звук\Устройства и принтеры«.

Здесь выберите свой принтер, щелкните по нему ПКМ (правая кнопка мышки) и выберите вкладку «Свойства принтера«. В свойствах перейдите в раздел «Доступ» и поставьте галочку напротив пункта «Общий доступ к данному принтеру».

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

image_pdfimage_print

php-fpm – расчет значений

If you need to calculate and change these values based on the amount of memory on the system the following command will help us to determine the memory used by each (PHP-FPM) child process:

ps -ylC php-fpm --sort:rss

pm.max_children can be calculated as:

pm.max_children = Total RAM dedicated to the web server / Max child process size

The server has 8GB of RAM, so:

pm.max_children = 6144MB / 85MB = 72

You need to take into account any other services running on the machine while calculating memory usage.

Then change the settings as follow:

pm.max_children = 70  
pm.start_servers = 20  
pm.min_spare_servers = 20  
pm.max_spare_servers = 35  
pm.max_requests = 500

Можно проверить среднее использование памяти процессами PHP-FPM этой коммандой:

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

Пример.

Объем общей / доступной / используемой памяти можно посмотреть с помощью free:

# free -m
              total        used        free      shared  buff/cache   available
Mem:           1803        1588          73           3         141          52
Swap:          2047         955        1092

Далее, возьмем за основу формулу для расчета pm.max_children (источник), и проведем расчет на примере:

Total Max Processes = (Total Ram - (Used Ram + Buffer)) / (Memory per php process)

Всего ОЗУ: 4Гб
Используется ОЗУ: 1000Мб
Буфер безопасности: 400Мб
Память на один дочерний php-fpm процесс (в среднем): 30Мб

Максимально возможное кол-во процессов = (4096 - (1000 + 400)) / 30 = 89
Четное количество: 89 округлили в меньшую сторону до 80

Значение остальных директив можно установить исходя из ожидаемой нагрузки на приложение а также учесть чем еще занимается сервер кроме работы php-fpm (скажем СУБД также требует ресурсов). В случае наличия множества задач на сервере – стоит снизить к-во как начальных / максимальных процессов.

К примеру учтем что на сервере находиться 2 пула www1 и www2 (к примеру 2 веб-ресурса), тогда конфигурация каждого из них может выглядеть как:

pm.max_children = 40    ; 80 / 2
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25

https://community.webcore.cloud/tutorials/how_to_solve_php_fpm_server_reached_max_children/
http://logvik.com/оптимизация-для-серверов-приложений-на-основе-nginxphp-fpm/php-fpm
https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/
http://adminunix.ru/nastrojka-php-fpm-nginx-na-vps/

 

image_pdfimage_print