You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 2c5d862
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: @l10n/ru/docs/node/docker.md
+58-4Lines changed: 58 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -129,10 +129,10 @@ docker build \
129
129
130
130
### CMake-флаги для каждого образа
131
131
132
-
| Образ |`LOW_MEMORY_NODE`|`BUILD_TESTNET`|
133
-
|-------|:-----------------:|:---------------:|
134
-
| production | OFF | OFF |
135
-
| testnet |OFF |ON |
132
+
| Образ |`BUILD_TESTNET`|
133
+
|-------|:---------------:|
134
+
| production | OFF |
135
+
| testnet | ON |
136
136
137
137
---
138
138
@@ -167,6 +167,59 @@ shared-file-size = 4G
167
167
168
168
---
169
169
170
+
## Ротация логов
171
+
172
+
vizd пишет весь вывод в stdout/stderr. Дефолтный драйвер `json-file` в Docker **не имеет ограничений по размеру** — цикл краша или буря ошибок может заполнить диск хоста за считанные минуты (в продакшне наблюдалось 35 ГБ+).
173
+
174
+
Вместо этого используйте драйвер `local`. Он хранит логи в компактном бинарном формате и автоматически ротирует файлы.
175
+
176
+
**Глобальная конфигурация (рекомендуется — защищает все контейнеры на хосте):**
177
+
178
+
```json
179
+
// /etc/docker/daemon.json
180
+
{
181
+
"log-driver": "local",
182
+
"log-opts": {
183
+
"max-size": "100m",
184
+
"max-file": "5"
185
+
}
186
+
}
187
+
```
188
+
189
+
Применить:
190
+
191
+
```bash
192
+
sudo systemctl restart docker
193
+
```
194
+
195
+
**Для конкретного контейнера (`docker run`):**
196
+
197
+
```bash
198
+
docker run -d \
199
+
--log-driver=local \
200
+
--log-opt max-size=100m \
201
+
--log-opt max-file=5 \
202
+
--name vizd \
203
+
vizblockchain/vizd:latest
204
+
```
205
+
206
+
**Для конкретного контейнера (docker-compose):**
207
+
208
+
```yaml
209
+
services:
210
+
vizd:
211
+
image: vizblockchain/vizd:latest
212
+
logging:
213
+
driver: local
214
+
options:
215
+
max-size: "100m"
216
+
max-file: "5"
217
+
```
218
+
219
+
> При `max-file: 5` и `max-size: 100m` Docker хранит не более 500 МБ логов на контейнер и автоматически удаляет старейший файл при ротации.
220
+
221
+
---
222
+
170
223
## Устранение неполадок
171
224
172
225
| Симптом | Причина | Решение |
@@ -176,3 +229,4 @@ shared-file-size = 4G
176
229
| Нет пиров | Файрвол блокирует порт 2001 | Откройте порт 2001 TCP входящий |
177
230
| Медленная синхронизация | Снимок не загружен | Предоставьте снимок в томе перед первым запуском |
| Диск заполняется логами Docker | Драйвер `json-file` не имеет ограничения по размеру | Настройте драйвер `local` с `max-size`/`max-file` — см. [Ротация логов](#ротация-логов) |
Copy file name to clipboardExpand all lines: @l10n/ru/docs/storage/shared-memory.md
+24-10Lines changed: 24 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -92,10 +92,21 @@ skip-virtual-ops = true
92
92
93
93
База данных автоматически увеличивается, когда свободное место падает ниже `min-free-shared-file-size`. При каждом изменении размера:
94
94
95
-
1. Приостанавливаются все операции (включая производство блоков и API-запросы).
96
-
2. Уничтожается текущее отображение памяти.
97
-
3. Файл увеличивается на `inc-shared-file-size`.
98
-
4. Файл заново отображается, пересчитываются все указатели индексов.
95
+
1. Записывается маркер сбоя `resize_in_progress`.
96
+
2. Все грязные страницы сбрасываются на диск (`flush()`).
97
+
3. Приостанавливаются все операции (включая производство блоков и API-запросы).
98
+
4. Уничтожается текущее отображение памяти.
99
+
5. Файл увеличивается на `inc-shared-file-size`.
100
+
6. Файл заново отображается, пересчитываются все указатели индексов.
101
+
7. Проверяется, что ключевые объекты (например, `dynamic_global_property_object`) пережили перераспределение.
102
+
8. Маркер сбоя удаляется.
103
+
104
+
### Механизмы безопасности
105
+
106
+
-**Сброс перед изменением размера:** Грязные страницы записываются на диск до уничтожения отображения, что гарантирует согласованность файла на диске в случае сбоя во время увеличения.
107
+
-**Маркер сбоя:** Файл `resize_in_progress` записывается перед деструктивным перераспределением и удаляется после успешного завершения. Если процесс аварийно завершается во время изменения размера, маркер сохраняется и запускает автоматическое восстановление при следующем запуске.
108
+
-**Проверка после изменения размера:** После перераспределения узел проверяет, что `max_memory()` соответствует ожидаемому размеру и что критические объекты (например, `dynamic_global_property_object`) не повреждены. Повреждение обнаруживается рано, а не приводит к запутанным сбоям позже.
109
+
-**Безопасность при bad_alloc:** Если разделяемая память исчерпана во время применения блока, сессия отмены безопасно отбрасывается (вместо попытки обречённой отмены, которая привела бы к краху процесса через `std::terminate`). Отложенное изменение размера планируется на следующий блок.
99
110
100
111
Выделяйте `shared-file-size` с запасом, чтобы минимизировать частоту изменений размера. Каждое изменение вызывает скачок задержки.
101
112
@@ -121,22 +132,25 @@ skip-virtual-ops = true
121
132
```
122
133
1. Открыть shared_memory.bin (увеличить, если shared-file-size больше)
123
134
2. Захватить эксклюзивную блокировку файла
124
-
3. Инициализировать индексы
125
-
4. Если отсутствует genesis → init_genesis()
126
-
5. Открыть block_log или dlt_block_log
127
-
6. undo_all() → откатиться к последнему необратимому блоку
128
-
7. Проверить совпадение head блока с block log
135
+
3. Проверить маркер сбоя resize_in_progress → запустить восстановление при обнаружении
136
+
4. Инициализировать индексы
137
+
5. Если отсутствует genesis → init_genesis()
138
+
6. Открыть block_log или dlt_block_log
139
+
7. undo_all() → откатиться к последнему необратимому блоку
140
+
8. Проверить совпадение head блока с block log
129
141
```
130
142
131
143
---
132
144
133
145
## Восстановление
134
146
135
147
| Симптом | Действие |
136
-
|---------|---------|
148
+
|---------|--------|
137
149
|`CRITICAL: validator X account object MISSING`| Повреждение — использовать `--replay-from-snapshot --snapshot-auto-latest`|
138
150
|`Could not modify object, uniqueness constraint violated`| Повреждение — использовать `--replay-from-snapshot --snapshot-auto-latest`|
139
151
|`Unable to acquire READ lock`| Конкуренция за блокировку — увеличить `read-wait-micro` / включить `single-write-thread`|
152
+
|`Shared memory corrupted: previous resize() crashed`| Прерванное изменение размера — использовать `--replay-from-snapshot --snapshot-auto-latest`|
153
+
|`dynamic_global_property_object missing after resize`| Повреждение после изменения размера — использовать `--replay-from-snapshot --snapshot-auto-latest`|
0 commit comments