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
$ 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 ГБ.
$ find / -type f -name "*log*" | xargs ls -lSh | more $ du -a / | sort -rn | grep log | more $ find / -name '*log*' -size +1000M -exec du -h {} \;
Если предположить, что найденный файл — это .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. Устранение неполадок, связанных с исключениями ввода-вывода на диске
Как устранить неполадки исключений дискового ввода-вывода, таких как медленная запись или высокое использование диска. Сначала определите идентификатор процесса, вызывающего исключение дискового ввода-вывода.
$ iotop -o
Просмотр всех идентификаторов процессов, которые в данный момент записывают на диск.
Шаг 2: Если индикаторы записи на низком уровне и нет никаких заметных операций записи, необходимо проверить сам диск. Можно выполнить:
$ dmesg
$ cat /var/log/message
чтобы увидеть, есть ли какие-либо сообщения об ошибках диска.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.