Это продолжение моего предыдущего блога о SRE/DevOps Interview Questions — Linux Troubleshooting. Иногда первоначальный вопрос бывает неясным, а последующие действия проясняют путь, именно на этом я собираюсь сосредоточиться в этом блоге. Я постараюсь собрать здесь больше вопросов и возможных объяснений.
Вопрос: В системе запущена служба, и вам сказали, что она работает неправильно. Как бы вы устранили неполадки?
Ответ: После проверки DNS и других вещей, я бы попробовал SSH
в систему и попытался посмотреть, что происходит.
Следующий вопрос: Вы получаете сообщение об ошибке, как показано ниже:
ssh: connect to host example.com port 22: Resource temporarily unavailable
Однако вы обнаружили, что у вас есть доступ IPMI к машине, поэтому вы можете использовать его для входа в систему и получаете что-то вроде этого:
root@example.com#
Последующий ответ: Итак, сейчас я попытаюсь выполнить несколько основных команд, чтобы посмотреть, что происходит, например top
, ps
и т.д.
Последующий вопрос: Вы по-прежнему получаете аналогичную ошибку при выполнении любой команды:
fork: retry: Resource temporarily unavailable
Примечание: Возможно, теперь вы уже знаете, в чем проблема, по крайней мере, имеете некоторое представление о ней. Она связана с тем, что ресурсы исчерпаны, это могут быть файлы, процессы и т.д., и вы поняли, что не можете запустить ни одну команду (в частности, любую внешнюю команду, которая требует форка).
Собственно вопрос: Как бы вы устранили неполадки в linux box, учитывая, что ни одна из внешних команд не выполняется?
Факты: Что делать? Использовать команды, которые являются внутренними или встроенными в оболочку.
Как же найти встроенные команды, которые могут быть полезны для устранения неполадок? Также если внешние команды недоступны, то как собрать информацию о системе (top
, ps
, lsof
…даже cat
недоступен )…..🤔.
→ файловая система /proc
и пара встроенных функций, таких как read и for.
Введите help в оболочке, и она выдаст вам все команды, которые встроены в оболочку.
Читайте о файловой системе /proc в моем предыдущем блоге SRE/DevOps Interview Questions — Linux Troubleshooting, а также здесь
Очевидно, что вся информация, поступающая от таких команд, как ps
, lsof
, vmstat
и т.д., может быть найдена в файловой системе /proc
, если вы посмотрите правильный файл.
Например, файл cmdline
расскажет вам о последней команде, запущенной в системе, каталог fd
содержит все дескрипторы файлов, а все папки с номерами — это PID, запущенные в системе.
Итак, если предположить, что в системе открыто слишком много файлов и все ресурсы исчерпаны, как узнать, какой pid использует сколько файлов, не используя внешние команды.
for fd in /proc/[0-9]*/fd/*; do echo $fd ; done
/proc/1/fd/0
/proc/1/fd/1
/proc/1/fd/2
/proc/1/fd/255
/proc/1/fd/3
Так вы сможете увидеть дескрипторы файлов, которые использует любой pid. Если вы хотите посмотреть, какая последняя команда была выполнена в системе без cat или посмотреть содержимое файла с помощью cat
.
read $(</proc/${PID}/cmdline)
Таким образом, используя read
, for и другие внутренние команды, вы можете узнать, что происходит в системе.
Вопрос с подвохом: Как удалить файл с именем -f
или --file
?
Ответ: Хорошо объяснено здесь. Хотя интервьюер ожидает, что вы проведете его/ее через процесс выполнения команд в системе linux.
Вопрос: Объясните приведенный ниже результат и какая команда его выдает?
Вопрос: Назовите поля и что они представляют?
Вопрос: Глядя на приведенный ниже вывод, пожалуйста, объясните, что происходит в машине? Пожалуйста, будьте максимально подробны и описательны.
Вопрос: Сравните два приведенных выше результата vmstat
и объясните их сходства и различия?
Вопрос: Что вы понимаете из приведенного ниже вывода vmstat
и какова связь между колонками in
и cs
?
Вопрос с подвохом: Глядя на vmstat
вы можете сказать, сколько CPU и ядер имеет система?
Вопрос: Как найти конфиг и другие связанные файлы, если известен только процесс?
Ответ: Проверьте lsof
.
Вопрос: Если между двумя машинами установлено TCP-соединение? Как перемещаются пакеты, если это пакеты IP Datagram? Если да, то что будет преимуществом? Быстрее? Что насчет задержки?
Объяснение: Хорошее содержание для чтения о TCP и UDP.
Вопрос: Когда вы делаете curl example.com
, что происходит?
Пояснения: Я не обязан говорить, что происходит, когда вы делаете curl example.com
, я хочу сказать, что это, по сути, комбинация нескольких вопросов.
- Как выполняется curl в системе? По сути, пройдите весь процесс выполнения команды от пространства пользователя до пространства ядра.
- Объясните вызовы
fork()
иexec()
.- Объясните известные системные вызовы, которые могут быть задействованы.
- Разрешение DNS от
example.com
доIP-адреса
- Объясните передачу запроса от вашего терминала к машине назначения, а затем ответ обратно на ваш терминал.
- По возможности подробно опишите передачу пакетов Концепции сетевого уровня 2-3.
Последующий вопрос: Что означает вывод curl example.com
? Пожалуйста, объясните?
>> curl example.com
<HTML>
<HEAD>
<TITLE>Document Has Moved</TITLE>
</HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<H1>Document Has Moved</H1>
<HR>
<FONT FACE="Helvetica,Arial"><B>
Description: The document you requested has moved to a new location. The new location is "https://www.example.com".
</B></FONT>
<HR>
</BODY>
Объяснение: Расскажите о коде ответа, который вы получили (не виден в выводе) и почему. Что вы можете сделать, чтобы получить код ответа 200
?
Объясните, как работает HTTPS, и подробно опишите 3-стороннее рукопожатие. Объясните асимметричное и симметричное шифрование в терминах SSL. Вот хорошая статья об этом
Последующий вопрос: Как указать системе не использовать /etc/hosts
Does file override для разрешения DNS?
Ответ: nsswitch.conf
читайте об этом здесь
Вопрос: Что такое служба nscd
и зачем она нужна?
Ответ: Читайте о nscd
здесь
Следующий вопрос: Как система Linux узнает, что ваше приложение или любое другое приложение будет использовать какой протокол (TCP
или UDP
) для связи?
Ответ: /etc/services
хорошо написано здесь об этом.
Вопрос: Как имитировать 50%
падение пакетов для целей тестирования?
Объяснение: Здесь
Вопрос: Расскажите о gRPC
и зачем его использовать? Плюсы и минусы?
Пояснения: Хорошее чтение
Вопрос: Какие существуют способы подсчета общего количества TCP-соединений в системе?
Объяснения: можно использовать несколько команд, таких как netstat
, ss
и не забывать о файловой системе /proc
(в частности файл /proc/net/sockstat
). Хорошие примеры здесь
Вопрос: Как устранить короткоживущий процесс или процессы, вызывающие скачки процессора?
Объяснение: Хорошее чтение здесь и здесь
Надеюсь, это поможет вам в вашем путешествии и даст больше пищи для размышлений.
Счастливого устранения неполадок и удачи!!!