Update interview.md
Additions, corrections of answers and typos
This commit is contained in:
parent
46b99fac31
commit
653fd50e6a
1 changed files with 269 additions and 122 deletions
283
interview.md
283
interview.md
|
|
@ -235,6 +235,7 @@
|
|||
- Ответ
|
||||
|
||||
Через IPMI или kvm если оно есть на сервере.
|
||||
Ну или звонить дежурному инженера ЦОДА, если иных опций нет.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -245,9 +246,9 @@
|
|||
|
||||
KVM (или kvm over ip) — устройство, позволяющее передавать видеосигнал и ввод с мыши/клавиатуры по сети с использованием IP-протокола от вашего сервера. При помощи KVM вы можете перезагрузить сервер, получить доступ в BIOS сервера и к другим функциям, которые невозможно выполнить на сервере через терминал. То есть он обособлен от операционной системы.
|
||||
|
||||
Часто используется как последнее средство. Сервер не грузится, или есть ещё какой-то программный сбой.
|
||||
Часто используется как последнее средств. Когда сервер не грузится, или есть ещё какой-то программный или системный сбой.
|
||||
|
||||
KVM - клавиатура, монитор(видео), мышь.
|
||||
KVM - это аббревиатура, состоящая из слов. Клавиатура, монитор(видео), мышь.
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -321,7 +322,7 @@
|
|||
### Модели процессора, количестве физических и логических ядер, поддерживаемых инструкциях, режиме работы?
|
||||
|
||||
- Ответ
|
||||
- Модель процессора `proc/cpuinfo`
|
||||
- Модель процессора `cat /proc/cpuinfo`
|
||||
|
||||
```
|
||||
model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
|
||||
|
|
@ -364,6 +365,7 @@
|
|||
- **performance** — режим максимальной мощности, выставляет максимально возможную частоту
|
||||
|
||||
- Физические ядра - это число физических ядер, реальных аппаратных компонентов.
|
||||
|
||||
Логические ядра - это число физических ядер, умноженное на количество потоков, которые могут выполняться на каждом ядре с помощью гиперпотока.
|
||||
например, мой 4-ядерный процессор запускает два потока на ядро, поэтому у меня есть 8 логических процессоров.
|
||||
|
||||
|
|
@ -373,7 +375,6 @@
|
|||
dmidecode -t processor | grep "Core Enabled:"
|
||||
Core Enabled: 6
|
||||
Core Enabled: 6
|
||||
|
||||
```
|
||||
|
||||
Видим, что на данной системе находится 12 физических ядер (6+6). Соответственно, нормальный показатель LA должен быть менее 12. Однако, на процессорах Intel используется технология [Hyper-Threading](http://www.intel.ru/content/www/ru/ru/architecture-and-technology/hyper-threading/hyper-threading-technology.html), которая делит одно физическое ядро на два логических.
|
||||
|
|
@ -561,7 +562,7 @@
|
|||
|
||||
### Типе используемого сетевого адаптера и состоянии его интерфейсов?
|
||||
|
||||
- Ответ дополнить
|
||||
- Ответ
|
||||
|
||||
```bash
|
||||
sorsstorage13 : ~ [0] # lspci | grep net
|
||||
|
|
@ -661,17 +662,18 @@
|
|||
|
||||
1. При включении компьютера цп переходит на адрес биоса и загружает биос.
|
||||
2. Биос, или uefi проходит кучу проверок и согласно своим проверкам носитель информации.
|
||||
3. На носителе находится MBR или GPT где находится загрузчик. Дальше по обстоятельствам. Загрузчик может загружать ось, а может передать дальше. Например, если у нас несколько систем на нескольких разделах.
|
||||
|
||||
3. На носителе находится MBR или GPT где находится загрузчик. Дальше по обстоятельствам. Загрузчик может загружать ось, а может передать управление дальше дальше.
|
||||
Например, если у нас есть несколько систем на нескольких разделах.
|
||||
Под первой частью загрузки подразумевается небольшая часть машинного кода, которая запускает второй загрузчик. Потому что выделяется 446 байт. Там ничего не поместится.
|
||||
4. Итого загрузчик первого этапа загружает загрузчик второго и кладет данные в оперативку. Загрузчик, зная где лежит загрузчик ос, грузит его, и грузит initial ram disk - там лежат модули ядра. Они также являются драйверами, которые необходимы для загрузки всей остальной системы.
|
||||
4. Итого загрузчик первого этапа загружает загрузчик второго и кладет данные в оперативку.
|
||||
Загрузчик, зная где лежит загрузчик ос, грузит его, и грузит initial ram disk - там лежат модули ядра. Они также являются драйверами, которые необходимы для загрузки всей остальной системы.
|
||||
|
||||
1. Затем ядро берет всё на себя. Инициализация устройств, конфигурирование процессора, памяти
|
||||
2. Далее запускается пользовательская среда, процесс init
|
||||
|
||||
|
||||
|
||||
Начало начал инициализация работы компьютера.
|
||||
**Начало начал инициализация работы компьютера**
|
||||
Перед включением нужно послать какой-то сигнал, чтобы начать вообще инициализацию загрузки пк.
|
||||
|
||||
Есть интеллектуальный способ, есть дедовской.
|
||||
|
|
@ -700,13 +702,14 @@
|
|||
|
||||
«Портативность», в контексте стандарта POSIX, относится к исходному коду (не к бинарникам, которые из этих самых исходников собираются).
|
||||
|
||||
«интерфейс» — это взаимодействие вашего кода с остальным кодом.
|
||||
«Интерфейс» — это взаимодействие вашего кода с остальным кодом.
|
||||
|
||||
Это такое описание общее как с нами будут работать программы. Можно взять программу из одной ос и без проблем запустить на другой.
|
||||
Семафоры. Разделение одного и того же ресурса.
|
||||
|
||||
Как управлять потоками, как держаться, и все такое.
|
||||
|
||||
---
|
||||
|
||||
### Что такое уровни выполнения
|
||||
|
||||
|
|
@ -714,11 +717,9 @@
|
|||
|
||||
В Linux существует такое понятие как уровень выполнения (run level). Уровень выполнения обозначается числами от 0 до 6.
|
||||
|
||||
Система в определенный момент времени находится на соответствующем
|
||||
уровне выполнения. Вы, как администратор системы, можете переводить её с
|
||||
одного уровня выполнения на другой. Это делается при помощи программы
|
||||
init (или telinit). Для этого программе в качестве аргумента передается
|
||||
число, соответствующее уровню выполнения.
|
||||
Система в определенный момент времени находится на соответствующем уровне выполнения.
|
||||
Вы, как администратор системы, можете переводить её с одного уровня выполнения на другой. Это делается при помощи программы init (или telinit).
|
||||
Для этого программе в качестве аргумента передается число, соответствующее уровню выполнения.
|
||||
|
||||
- **0** — выполняются действия по выключению системы.
|
||||
- **1** — однопользовательский режим (single user mode).
|
||||
|
|
@ -754,9 +755,10 @@
|
|||
- Написать ответ
|
||||
|
||||
**BIOS** - Basic Input-Output System. Это низкоуровневое по.
|
||||
Располагается на чипе пк на материнке. Он загружается при запуске пк, и отвечает за пробуждение аппаратных компонентов пк, обеспечивает правильную их работу. И запускает загрузчик
|
||||
Располагается на чипе пк на материнке. Он загружается при запуске пк, и отвечает за пробуждение аппаратных компонентов пк, обеспечивает правильную их работу. И запускает загрузчик.
|
||||
|
||||
При включении биос проходит самотестирование POST(Power-On Self Test) при включении питания перед загрузкой ОС. Он проверяет правильность конфигурации оборудования и его правильную работу. Если что-то пойдет не так, он будет пищать или покажет код проваленного теста.
|
||||
При включении биос проходит самотестирование POST(Power-On Self Test) при включении питания перед загрузкой ОС. Он проверяет правильность конфигурации оборудования и его правильную работу.
|
||||
Если что-то пойдет не так, он будет пищать или покажет код проваленного теста.
|
||||
Затем биос ищет загрузочную запись или MBR, и запускает загрузчик
|
||||
|
||||
Есть еще CMOS. Это дополнительный металл оксид-полупроводник. Это память с батарейкой, где биос хранит настройки на плате.
|
||||
|
|
@ -771,7 +773,7 @@
|
|||
|
||||
UEFI замена биосу.
|
||||
|
||||
По факту это новый стандарт, который решает ограничения биоса
|
||||
По факту это новый стандарт, который решает следующие ограничения биоса:
|
||||
|
||||
- Может грузиться с дсисков емкостью 2.2 ТБ. Предел 9.4 зетабайта. Это больше чем все данные в интернете. Использует GPT.
|
||||
- UEFI работает в 32 битном или 64 битном режиме. Имеет более адресумое адресное пространство. Загружается быстрее. Поэтому в uefi есть поддержка мыши, графика. Хоть и необязательно.
|
||||
|
|
@ -838,6 +840,7 @@
|
|||
|
||||
Здесь запускаются скрипты инициализации, отслеживает события, и реагирует на них. Более гибкий процесс инициализации. Если какая-то служба не запустилась, или вдруг упала, то апстарт это отследит и запустит повторно.
|
||||
|
||||
---
|
||||
|
||||
### Что такое systemd и init ? В чем основное преимущество первого над вторым ?
|
||||
|
||||
|
|
@ -857,6 +860,7 @@
|
|||
- Хорошая документированность (я не говорю, что легаси-набор плохо документирован, я лишь говорю, что systemd не уступает);
|
||||
- Он не только загрузчик, но и система инициализирующая демоны
|
||||
|
||||
---
|
||||
|
||||
### Как понять используется ли в системе systemd?
|
||||
|
||||
|
|
@ -970,9 +974,7 @@ Change: 2022-06-09 17:19:41.581240179 +0000
|
|||
|
||||
Посмотреть полную информацию по дескриптору возможно командой `stat <path_to_file>`.
|
||||
|
||||
Время модификации:
|
||||
|
||||
`stat --format=%y dira`
|
||||
Время модификации командой `stat --format=%y dira`
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -982,7 +984,8 @@ Change: 2022-06-09 17:19:41.581240179 +0000
|
|||
- Ответ
|
||||
|
||||
|
||||
Sudo позволяет подменить пользователя и выполнить команду от его имени. Расшифровывается именно так - **s**ubstitute **u**ser and **do**
|
||||
Sudo позволяет подменить пользователя и выполнить команду от его имени.
|
||||
Расшифровывается именно так - **s**ubstitute **u**ser and **do**
|
||||
|
||||
По умолчанию выполнение команды происходит от имени суперпользователя.
|
||||
|
||||
|
|
@ -1367,6 +1370,9 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
|
|||
|
||||
*Файловый дескриптор*
|
||||
- неотрицательное целое число, которое используется в интерфейсе между пространством пользователя и пространством ядра (kernel) для идентификации ресурсов файла / сокета. Когда создаётся новый поток ввода-вывода, ядро возвращает процессу, создавшему поток ввода-вывода, его файловый дескриптор.
|
||||
Важно отметить, что файловые дескрипторы не ограничиваются только файлами.
|
||||
Они также могут ссылаться на каталоги, сокеты, каналы (pipes), устройства ввода-вывода и даже некоторые специфические для процесса ресурсы, такие как файлы процесса и области памяти.
|
||||
Операционная система автоматически создает три файловых дескриптора для каждого процесса: 0 (стандартный ввод), 1 (стандартный вывод) и 2 (стандартный вывод ошибок).
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -1390,10 +1396,10 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
|
|||
|
||||
Он нужен в критических ситуациях, когда повис процесс.
|
||||
|
||||
Проблема использования sigkill.
|
||||
SIGKILL убивает дочерние процессы.И в этом случае может появиться процесс зомби. Уничтоженный процесс не имеет возможности сообщить родителю о том, что у него был сигнал уничтожения. (kill9)
|
||||
Проблема использования sigkill:
|
||||
SIGKILL убивает дочерние процессы.И в этом случае может появиться процесс зомби.
|
||||
Уничтоженный процесс не имеет возможности сообщить родителю о том, что у него был сигнал уничтожения. (kill9)
|
||||
|
||||
На некоторые сигналы можно
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -1414,16 +1420,17 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
|
|||
Часто говорят что это средняя загрузка процессора или нагрузка системы, или какие-то циферки.
|
||||
Узнать значение la можно разными способами. Например, uptime, top.
|
||||
|
||||
Принято, что маленькое значение это стабильное поведение системы. Большое значение - возможно проблема есть в системе, что-то идет не так, копятся процессы.
|
||||
Цифры обозначают нагрузку за определенный период времени. 1, 5 и 15 минут.
|
||||
Принято считать, что какое-то стабильное значение данного это стабильное поведение системы. Появление всплеска - возможно проблема есть в системе, что-то идет не так, копятся процессы.
|
||||
Цифры обозначают нагрузку за определенный период времени. 1, 5 и 15 минут. (Это важно учесть, это все рассчитывается для предыдущего времени. И когда вы заходите на сервер спустя минуту - там может ничего не быть)
|
||||
|
||||
|
||||
**Вообще - эта цифра показывает количество процессов в статусе d r**
|
||||
**Вообще - эта цифра показывает количество процессов в статусе d r (ожидание, запущено соответственно)**
|
||||
А дальше уже всё будет зависеть от ситуации.
|
||||
Допустим у нас сервер есть где постоянно диски насилуются. Там всегда LA будет высокая скорее всего. Просто потому что есть процессы в статусе d, которые копятся из-за того, что диск занят.
|
||||
Но на работу системы в целом это не влияет.
|
||||
Допустим у нас сервер есть где постоянно на диски пишутся резервные копии. Там LA будет высокая скорее всего. Просто потому что есть процессы в статусе d, которые копятся из-за того, что диск занят.
|
||||
Но на работу системы в целом это может не влиять вообще.
|
||||
|
||||
Если процессов скопилось много там, где это не ожидается, ну там сервера с базой, с php-fpm, nginx и прочим таким, то смотрим через `top -cHi -d1` что там именно скопилось.
|
||||
Если процессов скопилось много там, где это не ожидается, ну там сервера с сайтами, базами данных, с php-fpm, nginx и прочим таким, то смотрим через `top -cHi -d1` что там именно скопилось.
|
||||
И в таких вот случаях сервер может тупить, ибо будут копиться процессы в статусе r. Из-за чего работа сервера будет медленной. Даже по ssh иногда не зайти будет.
|
||||
|
||||
|
||||
|
||||
|
|
@ -1450,7 +1457,10 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
|
|||
|
||||
**Физическая память** (или ***«ОЗУ»***, ***«RAM»***, ***«оперативка»***) — это энергозависимая память, установленная в компьютере. Для её работы требуется непрерывный поток электричества. Перебои с электропитанием или внезапное выключение компьютера могут привести к стиранию хранящихся в ней данных. Кроме того, эта память является линейно адресуемой. Другими словами, значения адресов памяти увеличиваются линейным образом.
|
||||
|
||||
Запуская и исполняя программы, процессор напрямую обращается к физической памяти. Обычно программы хранятся на жестком диске. Время доступа процессора к диску значительно превышает аналогичное время доступа к физической (оперативной) памяти. Чтобы процессор мог выполнять программы быстрее, они сначала помещаются в физическую (оперативную) память. После завершения своей работы, они возвращаются обратно на жесткий диск. Освобожденная таким образом память может быть выделена новой программе. При выполнении данные программы называются **процессами**.
|
||||
Запуская и исполняя программы, процессор напрямую обращается к физической памяти.
|
||||
Обычно программы хранятся на жестком диске. Время доступа процессора к диску значительно превышает аналогичное время доступа к физической (оперативной) памяти.
|
||||
Чтобы процессор мог выполнять программы быстрее, они сначала помещаются в физическую (оперативную) память. После завершения своей работы, они возвращаются обратно на жесткий диск.
|
||||
Освобожденная таким образом память может быть выделена новой программе. При выполнении данные программы называются **процессами**.
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -1459,12 +1469,16 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
|
|||
|
||||
- Ответ
|
||||
|
||||
Виртуальная память (или «логическая память») — это метод управления памятью, осуществляемый операционной системой, который позволяет программам задействовать значительно больше памяти, чем фактически установлено в компьютере. Например, если объем физической памяти компьютера составляет 4 ГБ, а виртуальной 16 ГБ, то программе может быть доступен объем виртуальной памяти вплоть до 16 ГБ.
|
||||
Виртуальная память (или «логическая память») — это метод управления памятью, осуществляемый операционной системой, который позволяет программам задействовать значительно больше памяти, чем фактически установлено в компьютере.
|
||||
Например, если объем физической памяти компьютера составляет 4 ГБ, а виртуальной 16 ГБ, то программе может быть доступен объем виртуальной памяти вплоть до 16 ГБ.
|
||||
|
||||
Основное различие между физической и виртуальной памятью заключается в том, что физическая память относится к оперативной памяти компьютера, подключенной непосредственно к его материнской плате. Именно в ней находятся выполняемые в данный момент программы. А виртуальная память — это метод управления, расширяющий при помощи жесткого диска объем физической памяти, благодаря чему у пользователей появляется возможность запускать программы, требование к памяти которых превышает объем установленной в компьютере физической памяти.
|
||||
Основное различие между физической и виртуальной памятью заключается в том, что физическая память относится к оперативной памяти компьютера, подключенной непосредственно к его материнской плате.
|
||||
Именно в ней находятся выполняемые в данный момент программы.
|
||||
А виртуальная память — это метод управления, расширяющий при помощи жесткого диска объем физической памяти, благодаря чему у пользователей появляется возможность запускать программы, требование к памяти которых превышает объем установленной в компьютере физической памяти.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
### Почему в htop может быть не до конца корректная сводка по потребляемой памяти
|
||||
|
||||
|
|
@ -1532,7 +1546,7 @@ https://github.com/pixelb/ps_mem
|
|||
|
||||
### a=5; true | { true && a=10; } чему будет равно a?
|
||||
|
||||
Ответ будет 5.
|
||||
- Ответ будет 5.
|
||||
Потому что каждая команда конвейера исполняется в отдельной подоболочке (SubShell)
|
||||
```
|
||||
nparamonov@peka:~$ a=5; true | { true && a=10; echo $a; }
|
||||
|
|
@ -1588,8 +1602,7 @@ nparamonov@peka:~$ echo $a
|
|||
|
||||
## Диски и файловая система
|
||||
|
||||
**Что такое блочные устройства? Какие элементарные операции
|
||||
можно с ними производить?**
|
||||
**Что такое блочные устройства? Какие элементарные операции можно с ними производить?**
|
||||
|
||||
- Ответ
|
||||
|
||||
|
|
@ -1633,7 +1646,7 @@ nparamonov@peka:~$ echo $a
|
|||
|
||||
- Ответ
|
||||
|
||||
Согласно выводу
|
||||
На примере вывода:
|
||||
|
||||
```bash
|
||||
crw-rw-rw- 1 root root 1, 3 Feb 23 1999 null
|
||||
|
|
@ -1684,7 +1697,27 @@ nparamonov@peka:~$ echo $a
|
|||
|
||||
- Ответ
|
||||
|
||||
Создание файловой системы на блочном устройстве можно сделать с помощью команды `mkfs` (make file system).
|
||||
Эта команда обычно используется вместе с типом файловой системы, который вы хотите создать, например, ext4, ext3, xfs и т.д.
|
||||
|
||||
Вот пример команды, которая создает файловую систему ext4 на блочном устройстве `/dev/sdb1`:
|
||||
|
||||
```bash
|
||||
mkfs -t ext4 /dev/sdb1
|
||||
```
|
||||
|
||||
При создании файловой системы можно задать различные параметры, в зависимости от типа файловой системы. Например, для файловой системы ext4 можно задать следующие параметры:
|
||||
|
||||
- `-L label` : задает метку для файловой системы.
|
||||
- `-m reserved-blocks-percentage` : задает процент блоков, зарезервированных для суперпользователя.
|
||||
- `-E extended-options` : задает расширенные параметры, такие как stride, stripe-width и т.д.
|
||||
- `-b block-size` : задает размер блока в байтах (по умолчанию 4096).
|
||||
- `-N number-of-inodes` : задает количество индексных дескрипторов (inode) в файловой системе.
|
||||
|
||||
Но для той или иной файловой системы команды и ключи могут быть другими. Так что смотрите какая фс.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Что такое **inodes айноды**
|
||||
|
||||
|
|
@ -1737,7 +1770,7 @@ nparamonov@peka:~$ echo $a
|
|||
|
||||
---
|
||||
|
||||
### Какая файловая система бывает динамическими айнодами?
|
||||
### Какая файловая система бывает динамическими айнодами и что это такое, зачем нужно?
|
||||
|
||||
- Ответ
|
||||
|
||||
|
|
@ -1846,6 +1879,7 @@ nparamonov@peka:~$ echo $a
|
|||
---
|
||||
|
||||
### Какую файловую систему выбрать ext4 или xfs?
|
||||
- Ответ
|
||||
XFS поддерживает очень большие разделы и файлы.
|
||||
Также она хорошо работает при многопоточной нагрузке параллельной записи и чтения.
|
||||
Не очень подходит для однопоточных нагрузок с большим количеством метаданных. Например если один поток создает и удаляет большое количество мелких файлов.xfs поддерживает динамические inod-ы. В xfs они динамические, и их можно добавить.
|
||||
|
|
@ -1864,6 +1898,9 @@ ext4 поддерживает разделы до 50TB. Позволяет ум
|
|||
|
||||
https://access.redhat.com/articles/3129891
|
||||
|
||||
По своему опыту скажу - что xfs дисковые аварии в облаках плохо переживает. Потом сложно будет диск привести в рабочее состояние. То и дело будут отвалы, и проверки будут показывать ошибки.
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -1893,7 +1930,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
---
|
||||
|
||||
### Как узнать, какими процессами используется раздел? (lsof, fuser, grep within procfs)
|
||||
### Как узнать, какими процессами используется раздел?
|
||||
|
||||
- Ответ
|
||||
|
||||
|
|
@ -1915,7 +1952,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
Система автоматом монтирует диски на основании тех данных, которые берет их этого файла.
|
||||
|
||||
То есть монтирование во время загрузки
|
||||
То есть монтирование происходит во время загрузки
|
||||
|
||||
`/etc/mtab` – это файл, который содержит список уже смонтированных файловых систем.
|
||||
|
||||
|
|
@ -1945,7 +1982,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
Симлинк - магкая ссылка. При ее создании создается новый объект на существующий файл файловой системы.
|
||||
|
||||
Отличить можно по наличию буквы l
|
||||
Отличить можно по наличию буквы l в выводе команды ls например:
|
||||
|
||||
```
|
||||
ls -lih | grep sym
|
||||
|
|
@ -2158,7 +2195,7 @@ https://access.redhat.com/articles/3129891
|
|||
Сначала смотрим свободное место
|
||||
df
|
||||
|
||||
Потом иноды
|
||||
Потом иноды, поскольку айноды тоже имеют свойство заканчиваться
|
||||
df -i
|
||||
|
||||
```
|
||||
|
|
@ -2190,8 +2227,8 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
Бывает так, что превышается квота.
|
||||
Для каждого юзера и пользователя она своя может быть
|
||||
Бывает так, что превышается квота
|
||||
Для каждого юзера и пользователя она своя может быть, жестко заданная
|
||||
|
||||
```bash
|
||||
#посмотреть квоту юзера
|
||||
|
|
@ -2218,7 +2255,8 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
502 bad gateway, ошибка на стороне вышестоящего сервера
|
||||
502 bad gateway, ошибка на стороне вышестоящего сервера. То есть nginx сообщает о том, что получил ответ от другого сервера, к которому он обращался - некорректный или непонятный.
|
||||
И тут уже надо копать что там в логах у вышестоящего сервера не так.
|
||||
|
||||
Если брать nginx+apache
|
||||
|
||||
|
|
@ -2244,7 +2282,8 @@ https://access.redhat.com/articles/3129891
|
|||
}
|
||||
```
|
||||
Обращаем внимание на proxy_pass. Это то, куда у нас пошел запрос.
|
||||
А дальше действуем по ситуации. Перезапускаем сервис, смотрим логи этого приложения.
|
||||
А дальше действуем по ситуации. Перезапускаем сервис, смотрим логи этого приложения, или, как в данном случае можно еще посмотреть логи сервера apache.
|
||||
Впрочем, это касается всех ошибок 5xx.
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -2252,10 +2291,11 @@ https://access.redhat.com/articles/3129891
|
|||
### В директории находится файл с нечитаемым содержимым. Каким образом можно узнать формат хранения данных и предназначение файла?
|
||||
|
||||
- Ответ
|
||||
|
||||
Поможет команда `file`. Она в большинстве случаев показывает что это за файл по своей сути.
|
||||
```bash
|
||||
$ file stat-master.zip
|
||||
stat-master.zip: Zip archive data, at least v1.0 to extract
|
||||
|
||||
$ file unins000.exe
|
||||
unins000.exe: PE32 executable (GUI) Intel 80386, for MS Windows
|
||||
|
||||
|
|
@ -2274,8 +2314,8 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Файл не существует.
|
||||
- Файл существует, но это символическая ссылка
|
||||
- Файл существует, но это 32 битный файл. И нужны библиотеки для его запуска
|
||||
- Иногда из-за символов каких-нибудь, в питоне такое происходит, поудалять символы лишние нужно
|
||||
- Файл существует, но это 32 битный файл. И нужны библиотеки для его запуска.
|
||||
- Иногда из-за символов каких-нибудь, в питоне такое происходит, поудалять символы лишние нужно, в самом файле.
|
||||
- Нету интерпретатора в системе
|
||||
|
||||
---
|
||||
|
|
@ -2284,7 +2324,8 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
line-buffered опция которая выведет результат как только найдет
|
||||
Поможет утилита strace
|
||||
line-buffered в данном случае это опция, которая выведет результат как только найдет
|
||||
|
||||
strace -f - отслеживание дочерныих процессов
|
||||
|
||||
|
|
@ -2292,7 +2333,7 @@ https://access.redhat.com/articles/3129891
|
|||
strace -f lftp sitename |& grep --line-buffered open | grep /home/akkana
|
||||
```
|
||||
|
||||
Либо в самой программе, если удастся найти параметры
|
||||
Либо в самой программе, если удастся найти параметры вывода проблемы. Как правило это -vvv, verbose
|
||||
|
||||
```bash
|
||||
/usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
|
||||
|
|
@ -2371,13 +2412,36 @@ https://access.redhat.com/articles/3129891
|
|||
- Free – свободная память в системе.
|
||||
- Shared – память, используемая (преимущественно) в tmpfs
|
||||
- Buffer, и Cache идентифицируют память, используемую для нужд ядра / операционной системы. Буфер и кеш складываются вместе, а сумма указывается в разделе «buff/cache».
|
||||
- Available – примерное количество оперативной памяти, доступное для запуска новых приложений без использования ими раздела подкачки. В отличие от поля free, это поле принимает в расчёт страницу cache и также то, что не вся рекуперируемая (пригодная для повторного использования) память будет возвращена для рекуперации из-за того, что элементы используются в данный момент.
|
||||
- Available – примерное количество оперативной памяти, доступное для запуска новых приложений без использования ими раздела подкачки.
|
||||
В отличие от поля free, это поле принимает в расчёт страницу cache и также то, что не вся рекуперируемая (пригодная для повторного использования) память будет возвращена для рекуперации из-за того, что элементы используются в данный момент. (То есть то, что можно потенциально освободить. Кэш, буфер и тп)
|
||||
|
||||
Вот и получается, что доступная память (available) как правило больше или равна свободной памяти (free)
|
||||
|
||||
---
|
||||
|
||||
### Что такое разделяемая память?
|
||||
Привести примеры**
|
||||
|
||||
- Ответ
|
||||
Разделяемая память - это область памяти, которую могут использовать несколько процессов одновременно. Это один из способов межпроцессного взаимодействия, позволяющий различным процессам обмениваться данными без необходимости использования более сложных механизмов, таких как сокеты или каналы.
|
||||
|
||||
Например, клиент и сервер.
|
||||
Клиент это терминал ввода. Сервер принимает данные.
|
||||
Клиент вводит строку терминала. Строка передеается серверу через сегмент памяти. После чего информация выводится.
|
||||
|
||||
Более глобальные примеры:
|
||||
Базы данных. Общая память используется в бд, где ряд процессов обращаются к общим структурам данных, и манипулируют ими.
|
||||
|
||||
Веб сервера. Например, апач. Апач использует общую память для рабочих процесов. Что позволяет разным процессам обслуживать разные запросы.
|
||||
|
||||
Операционные системы. Например, linux использует общую память для IPC, кэширования файловой системы и других задач.
|
||||
|
||||
Подробнее про такую память можно почитать тут:
|
||||
https://dev.to/0xog_pg/using-shared-memory-in-linux-1p62
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Сервер под нагрузкой тормозит - тяжелые запросы к кассандре и ELK отрабатывают сильно медленнее чем раньше и чем другие аналогичные сервера.
|
||||
|
|
@ -2492,7 +2556,17 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
Неймспейсы, пространства имен
|
||||
Докер используется namespaces. Для создания изолированного рабочего пространства, которое называется контейнером.
|
||||
При запуске контейнера докер создает набор неймспейсов для этого контейнера.
|
||||
|
||||
Эти неймспейсы обеспечивают уровень изоляции. Каждый аспект контейнера выполняется в отдельном контейнере и его доступ ограничен неймспейсом.
|
||||
|
||||
В частности в Docker Engine использует следующее:
|
||||
- Пространство имен pid: Изоляция процессов (PID: идентификатор процесса).
|
||||
- Пространство имен net: Управление сетевыми интерфейсами (NET: Networking).
|
||||
- Пространство имен ipc: Управление доступом к ресурсам IPC (IPC: InterProcess Communication).
|
||||
- Пространство имен mnt: Управление точками монтирования файловой системы (MNT: Mount).
|
||||
- Пространство имен uts: Изолирование идентификаторов ядра и версий. (UTS: Unix Timesharing System).
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -2501,6 +2575,12 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
Это связано с тем, что Docker использует пространство имен PID (Process ID) для обеспечения изоляции процессов в контейнерах.
|
||||
Когда создается новый контейнер, Docker создает новое пространство имен PID для этого контейнера и запускает процесс в этом пространстве имен.
|
||||
|
||||
В этом изолированном пространстве имен PID относится только к процессам, запущенным в том же контейнере.
|
||||
Это означает, что процесс в контейнере **может видеть только другие процессы в том же контейнере и не имеет возможности видеть процессы, запущенные в других контейнерах или на хост-системе**.
|
||||
Это ключевой аспект изоляции и безопасности, обеспечиваемой контейнерами Docker.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -2524,10 +2604,35 @@ https://access.redhat.com/articles/3129891
|
|||
Можно.
|
||||
|
||||
- Контейнеры должны быть частью одной сети
|
||||
- Докер создает виртуальную сеть, default bridge и подключает к ней контейнеры
|
||||
- Докер создает виртуальную сеть, default bridge и подключает к ней контейнеры. Также использует драйвер overlay для многохостовых сетей
|
||||
- В сети контейнерам назначается айпишник
|
||||
- если контейнеры имеют выход в большую сеть, то ведут себя как программы на отдельных компах
|
||||
|
||||
Пример с сетевым драйвером bridge:
|
||||
1. Создаем сеть
|
||||
```
|
||||
docker network create my_network
|
||||
```
|
||||
|
||||
2. Запускаем два контейнера в сети (sleep 1d это для бездействия контейнера в течение дня. Полезно при дебаге порой):
|
||||
```
|
||||
docker run -d --name container1 --network my_network alpine sleep 1d
|
||||
docker run -d --name container2 --network my_network alpine sleep 1d
|
||||
```
|
||||
|
||||
3. Пробуем попинговать по имени:
|
||||
```
|
||||
docker exec -it container1 ping container2
|
||||
ubuntu@host:~$ docker exec -it container1 ping container2
|
||||
PING container2 (172.18.0.3): 56 data bytes
|
||||
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.110 ms
|
||||
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.083 ms
|
||||
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.111 ms
|
||||
```
|
||||
Это работает потому, что когда вы создаете контейнер в сети Docker, он получает собственный IP-адрес в этой сети и добавляет DNS-запись на DNS-сервер сети.
|
||||
Это позволяет контейнерам в одной сети взаимодействовать друг с другом, используя свои имена.
|
||||
Если вы хотите создать сеть на нескольких хостах Docker, используйте сетевой драйвер `overlay`.
|
||||
Для этого потребуется Docker Swarm или стороннее хранилище ключевых значений, например Consul или etcd.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -2535,8 +2640,42 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
Точка входа в приложение
|
||||
Точка входа в приложение.
|
||||
|
||||
Это инструкция в докерфайле, которая всегда будет выполняться при запуске контейнера.
|
||||
Она часто используется для определения основной команды для запуска контейнера.
|
||||
Например для запуска веб сервера или какой-либо иной службы.
|
||||
|
||||
Что происходит пошагово:
|
||||
Инструкция ENTRYPOINT в Dockerfile задает команду, которая всегда будет выполняться при запуске контейнера. Она часто используется для задания основной команды для запуска контейнера, например, для запуска веб-сервера, базы данных или службы.
|
||||
Вот что происходит шаг за шагом:
|
||||
|
||||
1. В процессе сборки образа Docker читает Dockerfile строка за строкой, сверху вниз. Когда Docker встречает инструкцию ENTRYPOINT, он записывает команду и ее аргументы.
|
||||
|
||||
2. После сборки образа при запуске контейнера из этого образа Docker выполняет команду, указанную в инструкции ENTRYPOINT.
|
||||
|
||||
3. Если команда Docker run также включает в себя команду, то она передается в качестве аргумента команде ENTRYPOINT.
|
||||
|
||||
Например, если у вас есть Dockerfile со следующим ENTRYPOINT:
|
||||
|
||||
```
|
||||
ENTRYPOINT ["/app/start.sh"]
|
||||
```
|
||||
|
||||
И запускается контейнер из этого образа с помощью команды:
|
||||
|
||||
```
|
||||
docker run -it my_image echo "Hello, World!"
|
||||
```
|
||||
|
||||
Докер выполнит команду ENTRYPOINT с командой run в качестве аргумента:
|
||||
|
||||
```
|
||||
/app/start.sh echo "Hello, World!"
|
||||
```
|
||||
|
||||
Обратите внимание, что команду ENTRYPOINT можно отменить при запуске контейнера, используя флаг `--entrypoint` в команде `docker run`.
|
||||
В этом основной смысл что можно переопределить аргумент, или вообще его отменить.
|
||||
|
||||
### В чем отличие CMD и ENTRYPOINT
|
||||
|
||||
|
|
@ -2903,8 +3042,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
Это иная реализация контейнеров. Которые работают в оси под открытой инициативой. И если у обычных <>, у ката qemu, kvm, опускается ниже Контейнер на стероидах. Больше для безопасности.
|
||||
|
||||
Это иная реализация контейнеров. Которые работают в оси под открытой инициативой. И если у обычных <>, у ката qemu, kvm, опускается ниже. Контейнер на стероидах. Больше для безопасности придумано.
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -3002,8 +3140,9 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ чтоб меньше доебывали
|
||||
|
||||
tcp перед передачей сигнала устанавливает связь между устройствами.
|
||||
udp сразу отправляет, возможна частичная потеря и несоблюдение порядка данных
|
||||
tcp перед передачей сигнала устанавливает связь между устройствами. И он требует хендшейк.
|
||||
udp сразу отправляет, хендшейк не устанавливает. Возможна частичная потеря и несоблюдение порядка данных.
|
||||
Но что делать, если доставка не гарантирована в таком случае? Просто отправляются по два пакета. Если один потерялся - дойдет второй.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -3047,13 +3186,13 @@ https://access.redhat.com/articles/3129891
|
|||
- Если корневой сервер не знает запрашиваемого домена, то он отправляет запрос серверу ответственному за зону (.ru), в которому привязан домен,
|
||||
- Если DNS сервер зоны не знает запрашиваемого домена, то запрос отправляется к NS серверу домена. IP адрес хоста, при его наличии у DNS сервера, возвращается обратно по цепочке
|
||||
|
||||
1. После того, как IP адрес хоста получили, необходимо сформировать на прикладном уровне запрос к серверу. К запросу добавляются следующие заголовки:
|
||||
3. После того, как IP адрес хоста получили, необходимо сформировать на прикладном уровне запрос к серверу. К запросу добавляются следующие заголовки:
|
||||
- Прикладной уровень: протокол запроса (HTTP/S, FTP и т.д),
|
||||
- Транспортный (TCP/UDP): порт, по которому обращаемся к серверу.
|
||||
- Сетевой уровень: IP адрес пакета
|
||||
- Канальный уровень: определяет есть ли такой адрес в сети. Если нет, то пакет передаётся шлюзу. Устройство шлюза проверяет свою таблицу маршрутизации и направляет пакет в нужном направлении.
|
||||
-
|
||||
1. Далее выполняется следующий алгоритм действий установления соединения:
|
||||
4. Далее выполняется следующий алгоритм действий установления соединения:
|
||||
- После того, как запрос достиг сервера, клиент отправляет клиенту запрос (client hello) и свою версию протокола TLS на защищенное соединение.
|
||||
- Сервер отвечает клиенту (server hello) с информацией о выбранной версии TLS, методом шифрования, методом компресии и публичный сертификат сервера, подписанный центром сертификации. Сертификат содержит публичный ключ, который будет использован клиентом для шифрования данных.
|
||||
- Клиент подтверждает сертификат сервера с помощью своего списка центров сертификации. Если сертификат подписан центром из списка, то серверу можно доверять.
|
||||
|
|
@ -3064,7 +3203,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
После этого защищенное соединение с сервером установлено.
|
||||
|
||||
1. Далее необходимо сформировать запрос серверу:
|
||||
5. Далее необходимо сформировать запрос серверу:
|
||||
- Клиент формирует запрос HTTP, в котором участвует метод (например GET), URL и версию протокола. Например `GET /pogoda/samara HTTP/2`.
|
||||
- Следующий заголовок клиента HOST, в котором указывается к какому хосту необходимо обратиться. Например `HOST: yandex.ru`. По заголовку HOST сервер может определить к какому сайту на сервере необходимо обратиться.
|
||||
- Запрос может также содержать и другие заголовки. Необходимо только, чтобы сервер смог понять эти заголовки.
|
||||
|
|
@ -3110,10 +3249,18 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
---
|
||||
|
||||
И NAT занимается тем, что переводит приватные адреса в общедоступные.
|
||||
|
||||
И NAT занимается тем, что переводит приватные адреса в общедоступные. NAT (Network Address Translation). Собственно, технология так и расшифровывается.
|
||||
Это позволяет устройству с частным адресом IPv4 обращаться к ресурсам за пределами его частной сети. NAT в сочетании с частными адресами IPv4 оказался полезным методом сохранения общедоступных IPv4-адресов.
|
||||
|
||||
---
|
||||
|
||||
Еще один вариант ответа:
|
||||
На офис и дом выдается один глобальный адрес. Фаервол применяет технологию NAT. Она же masquerade. И в этом случае фаервол подменяет локальный айпи на свой глобальный.
|
||||
Помимо этогодобавляет к этому соединению случайный порт порт, чтобы запомнить и промониторить доходят ли пакеты от внешнего источника на локальный адрес пользователя.
|
||||
Эта запись вносится в таблицу.
|
||||
Удаление из таблицы нат происходит либо по таймауту(если это настроено), либо в случае когда виден пакет fin. То есть, когда фаервол видит пакет завершения fin.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### Что такое SNI?
|
||||
|
|
@ -3829,6 +3976,7 @@ https://access.redhat.com/articles/3129891
|
|||
Хеш-таблицы — это тип структуры данных, в которой адрес или значение индекса элемента данных генерируются из хеш-функции.
|
||||
|
||||
Это ускоряет доступ к данным, поскольку значение индекса ведет себя как ключ к значению данных. Другими словами, в хэш-таблице хранятся пары ключ-значение, но ключ генерируется с помощью функции хеширования.
|
||||
По этому принципу, например, работают чит коды в GTA San Andreas. То, что мы знаем как читкоды - это не те слова, которые изначально закладывались разработчиками.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -3921,7 +4069,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
|
||||
Будет иметь значение `None`
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -4199,7 +4347,7 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
- Ответ
|
||||
|
||||
Нет. Поскольку есть поле узел. И шедулер назначает какому поду куда ехать
|
||||
Нет. Поскольку есть поле узел. И шедулер назначает какому поду куда ехать.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -4512,7 +4660,6 @@ https://access.redhat.com/articles/3129891
|
|||
|
||||
Также там есть ключи DirectoryOrCreate и FileOrCreate - они нужны для задачи кубернетесу проверить наличие папки, и потом обращение к файлу.
|
||||
|
||||
=
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue