Linux server system load

Анализ нагрузки на веб-сервер Linux

В данной статье пойдет речь о мониторинге нагрузки, именно, в контексте веб-сервера. Мы не будем особо заострять внимание на проверке производительности системы, как, например, командами top, htop, free и так далее.

Нагрузка на сервер

Анализ нагрузки стоит начать с общих метрик — потребление процессорного времени, памяти, нагрузки на сеть и дисковую систему.

Нагрузка по процессам

Проверить, нагружен ли сервер, а также понять, какой именно процесс больше всего потребляет ресурсов можно с помощью команд:

* по сути, все 3 вышеперечисленные команды выдают одну и туже информацию в разном виде. Какой-то из них может оказаться удобнее пользоваться. Утилита top встроена в систему, для использования остальных необходимо установить одноименные пакеты.

Оперативная память

Для определения объема свободной и занимаемой памяти можно воспользоваться командой:

* предыдущие команды тоже показывали утилизацию памяти, но кому-то команда free может показаться нагляднее.

Нагрузка на диск

Для определения нагрузки на дисковую систему, используем утилиту iotop. Сначала ее нужно установить.

а) На системы Debian / Ubuntu:

apt-get install iotop

б) На системы Red Hat / CentOS:

yum install iotop

После выполняем следующую команду:

Сетевая активность

Для измерения нагрузки на сеть необходимо установить утилиту nload.

а) В CentOS / Red Hat:

yum install nload

б) В Ubuntu / Debian:

apt-get install nload

После установки, запускаем утилиту командой:

* в данном примере будет запущена статистика для использования сетевого интерфейса eth0.

Что грузит систему

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

Использование lsof

lsof — утилита командной строки, которая отображает какие файлы используются процессами. Она позволит определить, к каким скриптам идет обращение со стороны веб-сервера. Для начала, необходимо установить lsof.

а) В CentOS / Red Hat:

yum install lsof

б) В Ubuntu / Debian:

apt-get install lsof

Теперь можно выполнить следующие команды:

* первая команда покажет, к каким файлам обращается apache, вторая — php-fpm (часто можно увидеть в связке с nginx).

Анализ error-логов

Анализ логов ошибок позволит не только обнаружить проблемы в работе сайта, но и найти причину его медленной работы. По умолчанию, логи находятся в каталоге /var/log. Если мы не меняли расположение логов, запускаем следующие команды:

tail -f /var/log/nginx/error.log

* лог ошибок nginx.

tail -f /var/log/php-fpm/error.log

* лог ошибок php-fpm.

tail -f /var/log/httpd/error_log

* лог ошибок apache в CentOS.

tail -f /var/log/apache2/error_log

* лог ошибок apache в Ubuntu.

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

Статистика веб-сервера

Для веб-серверов можно воспользоваться служебной страницей просмотра статуса. Она может показать статистику запросов к веб-серверу.

Apache

Для Apache необходим модуль mod_status, который идет в комплекте с данным веб-сервером. Проверить подключение модуля можно в конфигурационном файле httpd.conf (в разных Linux системах может находится в различных каталогах).

По умолчанию, server-status не активен. Создаем конфигурационный файл.

Для CentOS / Red Hat:

Для Ubuntu / Debian:

* где 2 — используемая версия apache.

В открытый конфигурационный файл добавим:

servername 111.111.111.111

Sethandler server-status

* где 111.111.111.111 — IP-адрес нашего веб-сервера; 80 — порт, на котором слушает apache.
* в данном примере мы прописали два варианта просмотра статистики: первый — обращение в браузере к серверу по IP-адресу + /server-status; второй — обращение к любому сайту + /server-status. Разные способы оправданы для разных настроек самих сайтов и используемых CMS.

Проверим корректность внесенных данных и перезапустим веб-сервер apache:

Читайте также:  Блокировка защиты windows 10

systemctl restart httpd || systemctl restart apache2

Теперь открываем браузер и вводим название сайта + /server-status, например, http://www.dmosk.ru/server-status. Или обращаемся к серверу по IP-адресу, например, http://111.111.111.111/server-status.

NGINX + PHP-FPM

Открываем конфигурационный файл nginx:

В секцию http добавляем:

.
server <
listen 80;
server_name 111.111.111.111;
location /server-status <
stub_status on;
>
>
.

* где 111.111.111.111 — IP-адрес нашего веб-сервера.

Проверяем корректность настройки и перезапускаем nginx:

systemctl restart nginx

Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера:

Теперь настроим статистику для php-fpm. В конфигурационном файле nginx в нашу директиву server добавим:

.
server <
listen 80;
server_name 78.110.63.31;
location /server-status <
stub_status on;
>
location /status <
access_log off;
include fastcgi_params;
#fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
>
>
.

* обратите внимание на закомментированную строку и строку под ней. В зависимости от того, как настроен php-fpm (слушает на порту или через сокетный файл) необходимо настроить nginx. В данном примере подразумевается, что php-fpm слушает на 9000 порту.

Открываем конфигурационный файл php-fpm:

Снимаем комментарий со следующей строки:

Проверяем настройку nginx, перезапускаем его и php-fpm:

systemctl restart nginx

systemctl restart php-fpm

Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера:

Долгие запросы

С помощью длительных запросов к веб-серверу или СУБД можно сделать выводы о том, что является узким местом в работе сервиса.

MySQL / MariDB

Для начала, воспользуемся инструкцией, чтобы настроить ведение лога медленных запросов (для MySQL или MariaDB).

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

PHP-FPM

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

Редактируем следующие параметры:

request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/www-slow.log

* request_slowlog_timeout определяет время, в течение которого должен выполняться запрос, чтобы он считался медленным; slowlog — путь до лога, куда будет сохранена информация о медленных запросах.

systemctl restart php-fpm

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

Источник

Systemd за пять минут

Наша компания занимается администрированием веб-серверов на базе CentOS. Довольно часто наши клиенты используют веб-приложения на базе python, ruby или java. Для автозапуска подобных приложений есть готовые шаблоны для написания стартап-скриптов. Но прогресс не стоит на месте, вышел уже второй релиз CentOS 7 и, следуя старой традиции «не ставить dot-zero релизы на продакшен», мы начинаем предлагать клиентам сервера на базе CentOS 7.1 (1503).

В CentOS7, так же как и в его родителе RHEL7, используется systemd — менеджер системы и служб для Linux, совместимый со скриптами инициализации SysV и LSB. systemd обеспечивает возможности агрессивной параллелизации и много всего прочего.

Огромный монстр с множеством возможностей, гибкими настройками и мегабайтами документации…

Но что делать, если стоит задача быстро-быстро, вот прямо вчера, сделать автозапуск некоего сервиса?
Давайте выжмем из документации минимально необходимый набор информации для создания простых старт-стоп скриптов.

Systemd запускает сервисы описанные в его конфигурации.
Конфигурация состоит из множества файлов, которые по-модному называют юнитами.

Все эти юниты разложены в трех каталогах:

/usr/lib/systemd/system/ – юниты из установленных пакетов RPM — всякие nginx, apache, mysql и прочее
/run/systemd/system/ — юниты, созданные в рантайме — тоже, наверное, нужная штука
/etc/systemd/system/ — юниты, созданные системным администратором — а вот сюда мы и положим свой юнит.

Юнит представляет из себя текстовый файл с форматом, похожим на файлы .ini Microsoft Windows.

[Название секции в квадратных скобках]
имя_переменной = значение

Для создания простейшего юнита надо описать три секции: [Unit], [Service], [Install]

В секции Unit описываем, что это за юнит:
Названия переменных достаточно говорящие:

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

Запускать юнит после какого-либо сервиса или группы сервисов (например network.target):

After=syslog.target
After=network.target
After=nginx.service
After=mysql.service

В итоге переменная Wants получается чисто описательной.
Если сервис есть в Requires, но нет в After, то наш сервис будет запущен параллельно с требуемым сервисом, а не после успешной загрузки требуемого сервиса

В секции Service указываем какими командами и под каким пользователем надо запускать сервис:

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

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

Читайте также:  Turn off the windows key

Также следует определить PIDFile=, чтобы systemd могла отслеживать основной процесс:

Команды на старт/стоп и релоад сервиса

ExecStart=/usr/local/bin/bundle exec service -C /work/www/myunit/shared/config/service.rb —daemon
ExecStop=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state stop
ExecReload=/usr/local/bin/bundle exec service -S /work/www/myunit/shared/tmp/pids/service.state restart

Тут есть тонкость — systemd настаивает, чтобы команда указывала на конкретный исполняемый файл. Надо указывать полный путь.

Таймаут в секундах, сколько ждать system отработки старт/стоп команд.

Попросим systemd автоматически рестартовать наш сервис, если он вдруг перестанет работать.
Контроль ведется по наличию процесса из PID файла

В секции [Install] опишем, в каком уровне запуска должен стартовать сервис

multi-user.target или runlevel3.target соответствует нашему привычному runlevel=3 «Многопользовательский режим без графики. Пользователи, как правило, входят в систему при помощи множества консолей или через сеть»

Вот и готов простейший стартап скрипт, он же unit для systemd:
myunit.service

Кладем этот файл в каталог /etc/systemd/system/

Смотрим его статус systemctl status myunit

Видим, что он disabled — разрешаем его
systemctl enable myunit
systemctl -l status myunit

Если нет никаких ошибок в юните — то вывод будет вот такой:

Запускаем сервис
systemctl start myunit

Смотрим красивый статус:
systemctl -l status myunit

Если есть ошибки — читаем вывод в статусе, исправляем, не забываем после исправлений в юните перегружать демон systemd

Источник

List of Commands to get Linux system info using terminal

In Linux, we can use the command terminal to check various system hardware configurations and information such as CPU, Memory, hard disk, etc., and here are those to use…

Although there are tools that can display Linux system info graphically, however, here we are going to use the inbuilt commands.

The question of how a system is equipped and how it performs in harsh everyday life is not only of theoretical interest. Lot’s of time to solve a problem we need to know hardware and its utilization to remove some bottleneck. Thus, if you are new to Linux systems or running any cloud server where you want to know about the system load, the network interface, and type of processor and chipset, or what hardware is actually in the system? Then here some top commands to follow…

Commands to View Linux System info using terminal

Here we are using Ubuntu 20.04 to display the results of the Linux system info commands, however, you can use them on older versions such as Ubuntu 18.04/16.04 including RPM-based distros like CentOS and RHEL. Apart from them, others are also supported such as Debian, Linux Mint, Kali, Elementary OS, Manjaro, and more.

1. Check Linux system CPU info and Virtualization support

To check out the full information of Linux system’s CPU such as Type of Architecture (i386, x86_64, etc.) (32-bit or 64-bit), Socket, Cores per socket, CPU speed, L cache, Virtualization type or support, etc. use the below given single command:

Furthermore, you can also check each CPU in detail (CPU model, frequency, etc.) of your computer, laptop, or server using:

Output:

2. Know about Linux System RAM details

Check out free Memory on your Linux system along with details of its size and hardware information.

To print free available RAM, type:

Those who are interested in full detail such as Total Memory, Free Memory, Buffers, Cache, Swap cached, Active, mapped, and more… can go for this one:

To identify each RAM used on each memory slot of your system’s motherboard, print the Memory Controller information using the dmidecode command:

3. Find out BIOS Info on Linux using Dmidecode

Dmidecode dumps the DMI (Desktop Management Interface) information of the machine in a readable way. This information includes hardware and BIOS.

You can get the current configuration and the maximum configuration supported by the system, such as the maximum amount of memory supported that we already have shown above…

Therefore, here are some uses of the dmidecode command to know further details of the system as well such as BIOS version, motherboard, and processor.

If you want to view all Linux useful system information use this one. However, it will give a lot of information.

Читайте также:  Команда windows температура процессора

4. Command to view hard disk and partition distribution

Do you want to know about each size of Hard disk and partition available? Then use-

OutPut:

Furthermore, those who want to dig more on hard disk and partitions, then to have each detail of the installed drives run fdisk -l with sudo rights:

Output

To get a clear view and all information along with the type of file system and partitions mounted points, we can also use:

Mount points can be further elaborated with:

5. Check Network card information

The network card installed on our Linux system is one of the important components to connect the internet and other local networks. However, to know its model, manufacturer, and other information without operating the system’s case, use the below-given commands.

Find out the IP address and available active ethernet interfaces:

Now, after using the above command you get the IP address and active ethernet interface, just use that with the below command. For example, ens33 is our interface.

The ethtool will show all information about the network card bandwidth such as what is the max speed, supported link modes, ports, and more…

To get network information we can also use Net-tools, however, we need to install it because by default it would not available on the system.

For Debian/Ubuntu: sudo ap tinstall net-tools
For RHEL/CentOS/Fedora– sudo yum install net-tools or sudo dnf install net-tools

To know Ipaddress:

For getting details of active connections, protocols, domain sockets, and more…

6. View PCI Slots information on Linux system

PCI slots, where we use graphic cards, network cards, and other third-party hardware directly on the Motherboard. To know about these PCI hardware slots run:

If you want more detailed information: lspci -v or lspci -vv

To see the device tree: lscpi -t

6. USB controllers and attached devices

View the details of USB slots and the devices plugged into them using lsusb command:

To have detailed info on USB slots and their active devices use :

7. Command to get complete Linux OS information

When we are running a Linux server and after upgrading or having installation, in case we want to know what version of Linux operating system we are using then, that is possible as well using the command terminal.

Get release info only:

8. Command to get Linux Kernel Information

A kernel, which is the core part of our Linux system, to check out which version we on before updating or after, run:

9. View Real-time processes

To go a bit further and know PID (Process ID, Unique number of the process) of the process executed on the system along with what is currently active we can use two commands:

To check out the PID (Process ID, Unique number of the process) of the process.

Real-time display of process status

A top is a text-based tool that gives complete information of currently active processes in real-time. To exit it, press Ctrl+C.

9. Complete Linux System Hardware Information

Here is the one final command that can give all the hardware information of your Linux system in a single shot. However, displaying all data in one place may feel clutter but if you don’t want to use multiple commands, then this one is for you.

Those who want to omit the slight unwanted information can use the same command with a short flag.

The good thing, if you want to print or save your Linux system hardware information in HTML format then that is also possible using lshw, simply run:

you will see the created file.

Now, open your browser and type or paste: file:///home/ubuntu/lshw-info.html

Closing thoughts:

So, these were some common commands we can use to find out Linux system info on CPU, Memory, OS, kernel, Network, and more. Although, these are not the only there are so many others, so keep searching this big world of Linux. If you know some commands to get a better view of the Linux system then the comment section is all yours…

Источник

Оцените статью