January 19

10 команд для устранения неполадок в Linux

В статье рассмотрим десяток кейсов и подходящих для них команд.

Подписывайтесь на канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

1. Как просмотреть процессы, потребляющие больше всего CPU?

$ ps H -eo pid,pcpu | sort -nk2 | tail
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
31396 0.6
30904 1.0
30914 1.0

2. Какое имя службы соответствует PID наиболее ресурсоемкого процесса?

Метод первый:

$ ps aux | fgrep 30914
work 30914 1.0 0.8 309568 71668 ? Sl Feb02 124:44 ./router2 –conf=rs.conf

Процесс — ./router2.

Метод второй:

$ ll /proc/30914
lrwxrwxrwx 1 work work 0 Feb 10 13:27 cwd -> /home/work/im-env/router2
lrwxrwxrwx 1 work work 0 Feb 10 13:27 exe -> /home/work/im-env/router2/router2

3. Как проверить состояние подключения определенного порта?

Метод первый:

$ netstat -lap | fgrep 22022
tcp 0 0 1.2.3.4:22022 *:* LISTEN 31396/imui
tcp 0 0 1.2.3.4:22022 1.2.3.4:46642 ESTABLISHED 31396/imui
tcp 0 0 1.2.3.4:22022 1.2.3.4:46640 ESTABLISHED 31396/imui

Метод второй:

$ /usr/sbin/lsof -i :22022
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
router 30904 work 50u IPv4 69065770 TCP 1.2.3.4:46638->1.2.3.4:22022 (ESTABLISHED)
router 30904 work 51u IPv4 69065772 TCP 1.2.3.4:46639->1.2.3.4:22022 (ESTABLISHED)
router 30904 work 52u IPv4 69065774 TCP 1.2.3.4:46640->1.2.3.4:22022 (ESTABLISHED)

4. Как проверить количество подключений на сервере?

Демон SSH (sshd) на IP-адресе 1.2.3.4 прослушивает порт 22. Как подсчитать количество подключений в различных состояниях (TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED) для службы sshd на 1.2.3.4?

$ netstat -n | grep 1.2.3.4:22 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

$ netstat -lnpta | grep ssh | egrep "TIME_WAIT | CLOSE_WAIT | ESTABLISHED"

Примечание: netstat в сочетании с grep/awk становится мощным инструментом.

5. Запрос данных из предварительно сохраненных логов

Сколько записей из предварительно сохраненного лога service.2024–06–26.log.bz2 содержат ключевое слово 1.2.3.4?

$ bzcat service.2024-06-26.log.bz2 | grep '1.2.3.4' | wc -l

$ bzgrep '1.2.3.4' service.2024-06-26.log.bz2 | wc -l

$ less service.2024-06-26.log.bz2 | grep '10.37.9.11' | wc -l

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

6. Советы по резервному копированию

Заархивировать каталог /opt/web/service_web для резервного копирования, исключив из него каталог логов и сохраните упакованный файл в каталоге /opt/backup.

$ tar -zcvf /opt/backup/service_web.tar.gz \
    -exclude /opt/web/service_web/logs \
    /opt/web/service_web

Примечание: эта команда обычно используется для реалтайм-логов. Когда проект необходимо упаковать и перенести, часто требуется исключить каталог журнала. Параметр `exclude` в этом случае будет полезен.

7. Запрос количества потоков

Запросить общее количество потоков, запущенных для служб сервера.

$ ps -eLf | wc -l

$ pstree -p | wc -l

8. Очистка самого большого файла

Найти и освободить место от большого количества логов исключений, сгенерированных Tomcat на сервере. Предположим, что файл содержит ключевое слово «log» и его размер превышает 1 ГБ.

Шаг 1: Найдите файл

$ find / -type f -name "*log*" | xargs ls -lSh | more 

$ du -a / | sort -rn | grep log | more

$ find / -name '*log*' -size +1000M -exec du -h {} \;

Шаг 2: Очистите файл

Если предположить, что найденный файл — это .log, то правильным способом его очистки будет:

$ echo "" > a.log

Либо можно поступить более радикально:

$ rm -rf a.log

Хотя это удалит файл, если служба Tomcat все еще запущена, пространство на диске не будет немедленно освобождено. Чтобы освободить дисковое пространство, нужно перезапустить Tomcat.

9. Отображение файла, фильтрация комментариев

Отобразить файл server.conf, скрыв строки комментариев, начинающиеся с символа #.

$ sed -n '/^[#]/!p' server.conf

$ sed -e '/^#/d' server.conf

$ grep -v "^#" server.conf

10. Устранение неполадок, связанных с исключениями ввода-вывода на диске

Как устранить неполадки исключений дискового ввода-вывода, таких как медленная запись или высокое использование диска. Сначала определите идентификатор процесса, вызывающего исключение дискового ввода-вывода.

Шаг 1:

$ iotop -o

Просмотр всех идентификаторов процессов, которые в данный момент записывают на диск.

Шаг 2: Если индикаторы записи на низком уровне и нет никаких заметных операций записи, необходимо проверить сам диск. Можно выполнить:

$ dmesg

или:

$ cat /var/log/message

чтобы увидеть, есть ли какие-либо сообщения об ошибках диска.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.