# Discourse перегружен реальным трафиком или DDoS? 100% загрузка ЦП при адекватном трафике и мощном сервере

**URL:** <https://meta.discourse.org/t/discourse-overloaded-real-traffic-or-ddos-100-cpu-usage-despite-of-decent-traffic-and-high-specs-server/203976>\
**Category:** Self-hosting\
**Tags:** server-resources\
**Created:** [19.Сентябрь.2021 21:33:10 UTC](https://meta.discourse.org/t/discourse-overloaded-real-traffic-or-ddos-100-cpu-usage-despite-of-decent-traffic-and-high-specs-server/203976 "2021-09-19T21:33:10Z")\
**Posts on this page:** 1\
**Showing post:** 17

<div class="post-metadata">

**Author:** ![ahmed\_khan1](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ahmed_khan1/32/201517_2.png) [@ahmed\_khan1](https://meta.discourse.org/u/ahmed_khan1)\
**Post date:** [24.Сентябрь.2021 16:42:22 UTC](https://meta.discourse.org/t/discourse-overloaded-real-traffic-or-ddos-100-cpu-usage-despite-of-decent-traffic-and-high-specs-server/203976/17 "2021-09-24T16:42:22Z")

</div>

@pfaffman

> [@pfaffman](#):
>
> Есть другие темы, посвященные настройке производительности.

Не могли бы вы порекомендовать нам какие-либо темы, которые могли бы нам помочь?

> [@pfaffman](#):
>
> Включение шаблона ограничения частоты запросов (rate limiting) должно быть безопасным.

Мы включили шаблон ограничения частоты запросов, и все наши пользователи стали получать ошибку 429.

 ![image](https://global.discourse-cdn.com/meta/original/3X/e/4/e4c010161a2a992761cfee3cffc9b0bd4151ac66.jpeg)

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/f/2fa8443caf2e8bd048829681691972d8368e7ba0.jpeg)

Затем мы отключили шаблон Cloudflare, но после этого у нас пропал доступ к Discourse по локальному IP-адресу. Не могли бы вы подсказать, как добавить IP-адрес в белый список в Discourse?

> [@pfaffman](#):
>
> Важны быстрый процессор и SSD.

16 ГБ ОЗУ / 8 vCPU с SSD, выделенный Droplet от DigitalOcean на базе Intel.

> [@pfaffman](#):
>
> Какого размера ваша база данных? Меняли ли вы какие-либо настройки базы данных?

```plaintext
table_name | row_estimate | table_size | index_size | total_size
-----------------------------------------------------------------------------------
topic_views | 7638895 | 339 MB | 704 MB | 1044 MB
post_search_data | 95984 | 493 MB | 117 MB | 610 MB
posts | 115690 | 512 MB | 32 MB | 544 MB
post_revisions | 18876 | 368 MB | 1512 kB | 370 MB
top_topics | 74384 | 70 MB | 209 MB | 279 MB
incoming_links | 1194305 | 72 MB | 75 MB | 147 MB
topic_links | 248176 | 46 MB | 54 MB | 101 MB
stylesheet_cache | 1819 | 94 MB | 352 kB | 95 MB
user_histories | 38564 | 83 MB | 6376 kB | 90 MB
topics | 88662 | 49 MB | 37 MB | 85 MB
notifications | 144259 | 39 MB | 26 MB | 65 MB
topic_search_data | 77107 | 47 MB | 16 MB | 63 MB
user_profile_views | 298745 | 30 MB | 27 MB | 57 MB
scheduler_stats | 247499 | 38 MB | 6736 kB | 44 MB
topic_users | 199664 | 28 MB | 14 MB | 42 MB
user_actions | 113450 | 15 MB | 23 MB | 38 MB
topic_tags | 293483 | 20 MB | 13 MB | 33 MB
search_logs | 172445 | 24 MB | 8752 kB | 33 MB
post_timings | 179627 | 15 MB | 8568 kB | 24 MB
post_stats | 105481 | 13 MB | 5104 kB | 18 MB
reviewables | 4737 | 15 MB | 1184 kB | 17 MB
optimized_images | 50814 | 12 MB | 4704 kB | 16 MB
user_auth_token_logs | 42998 | 12 MB | 1904 kB | 14 MB
incoming_referers | 26867 | 4520 kB | 4592 kB | 9112 kB
directory_items | 33456 | 2928 kB | 5488 kB | 8416 kB
draft_sequences | 38948 | 5144 kB | 2448 kB | 7592 kB
user_associated_accounts | 2237 | 6728 kB | 448 kB | 7176 kB
user_custom_fields | 27921 | 2768 kB | 3568 kB | 6336 kB
reviewable_histories | 8538 | 5784 kB | 528 kB | 6312 kB
user_visits | 27147 | 1552 kB | 2656 kB | 4208 kB
uploads | 5623 | 1560 kB | 2128 kB | 3688 kB
users | 5633 | 1720 kB | 1744 kB | 3464 kB
topic_link_clicks | 16494 | 2088 kB | 768 kB | 2856 kB
email_logs | 5057 | 1128 kB | 1568 kB | 2696 kB
web_crawler_requests | 5533 | 848 kB | 1632 kB | 2480 kB
topic_allowed_users | 14487 | 976 kB | 1128 kB | 2104 kB
category_tag_stats | 11176 | 736 kB | 1192 kB | 1928 kB
drafts | 219 | 1712 kB | 32 kB | 1744 kB
category_users | 10579 | 544 kB | 1120 kB | 1664 kB
user_badges | 7852 | 768 kB | 888 kB | 1656 kB
email_tokens | 6175 | 800 kB | 832 kB | 1632 kB
tag_search_data | 6860 | 736 kB | 808 kB | 1544 kB
group_users | 9277 | 808 kB | 696 kB | 1504 kB
user_profiles | 5629 | 968 kB | 472 kB | 1440 kB
user_search_data | 5633 | 712 kB | 704 kB | 1416 kB
user_emails | 5117 | 504 kB | 760 kB | 1264 kB
tags | 7121 | 592 kB | 640 kB | 1232 kB
plugin_store_rows | 4103 | 864 kB | 360 kB | 1224 kB
user_stats | 5631 | 1064 kB | 144 kB | 1208 kB
unsubscribe_keys | 2190 | 528 kB | 520 kB | 1048 kB
reviewable_scores | 4540 | 704 kB | 320 kB | 1024 kB
user_options | 5469 | 880 kB | 144 kB | 1024 kB
user_avatars | 5346 | 392 kB | 456 kB | 848 kB
incoming_domains | 4985 | 408 kB | 432 kB | 840 kB
post_uploads | 3194 | 264 kB | 568 kB | 832 kB
post_custom_fields | 2804 | 376 kB | 432 kB | 808 kB
topic_thumbnails | 3014 | 248 kB | 536 kB | 784 kB
user_uploads | 5549 | 328 kB | 432 kB | 760 kB
user_auth_tokens | 1382 | 416 kB | 336 kB | 752 kB
topic_custom_fields | 1058 | 352 kB | 240 kB | 592 kB
application_requests | 5401 | 280 kB | 272 kB | 552 kB
topic_allowed_groups | 3116 | 176 kB | 264 kB | 440 kB
quoted_posts | 2142 | 168 kB | 240 kB | 408 kB
theme_fields | 23 | 328 kB | 32 kB | 360 kB
post_actions | 1057 | 112 kB | 224 kB | 336 kB
watched_words | 1946 | 168 kB | 144 kB | 312 kB
javascript_caches | 11 | 248 kB | 64 kB | 312 kB
schema_migration_details | 1218 | 200 kB | 104 kB | 304 kB
dismissed_topic_users | 463 | 104 kB | 160 kB | 264 kB
discourse_voting_topic_vote_count | 1407 | 120 kB | 96 kB | 216 kB
category_featured_topics | 409 | 64 kB | 120 kB | 184 kB
categories | 73 | 72 kB | 112 kB | 184 kB
post_replies | 916 | 88 kB | 80 kB | 168 kB
group_histories | 498 | 56 kB | 112 kB | 168 kB
site_settings | 255 | 112 kB | 48 kB | 160 kB
bookmarks | 179 | 24 kB | 112 kB | 136 kB
user_security_keys | 3 | 16 kB | 112 kB | 128 kB
skipped_email_logs | 296 | 48 kB | 80 kB | 128 kB
category_custom_fields | 513 | 56 kB | 72 kB | 128 kB
groups | 10 | 80 kB | 48 kB | 128 kB
schema_migrations | 1217 | 64 kB | 56 kB | 120 kB
assignments | 98 | 56 kB | 48 kB | 104 kB
user_archived_messages | 637 | 40 kB | 64 kB | 104 kB
given_daily_likes | 569 | 32 kB | 64 kB | 96 kB
invites | 21 | 16 kB | 80 kB | 96 kB
do_not_disturb_timings | 0 | 8192 bytes | 80 kB | 88 kB
sitemaps | 9 | 48 kB | 32 kB | 80 kB
badges | 52 | 32 kB | 48 kB | 80 kB
user_api_keys | 1 | 16 kB | 64 kB | 80 kB
incoming_emails | 0 | 8192 bytes | 64 kB | 72 kB
user_second_factors | 21 | 16 kB | 48 kB | 64 kB
email_change_requests | 2 | 16 kB | 48 kB | 64 kB
screened_ip_addresses | 5 | 16 kB | 48 kB | 64 kB
api_keys | 4 | 16 kB | 48 kB | 64 kB
backup_metadata | 6 | 48 kB | 16 kB | 64 kB
child_themes | 4 | 8192 bytes | 48 kB | 56 kB
tag_users | 59 | 8192 bytes | 48 kB | 56 kB
invited_users | 4 | 8192 bytes | 48 kB | 56 kB
group_mentions | 6 | 8192 bytes | 48 kB | 56 kB
tag_group_permissions | 1 | 8192 bytes | 48 kB | 56 kB
category_search_data | 73 | 16 kB | 40 kB | 56 kB
anonymous_users | 102 | 8192 bytes | 48 kB | 56 kB
topic_invites | 6 | 8192 bytes | 48 kB | 56 kB
user_notification_schedules | 8 | 8192 bytes | 48 kB | 56 kB
directory_columns | 8 | 16 kB | 32 kB | 48 kB
themes | 6 | 16 kB | 32 kB | 48 kB
external_upload_stubs | 0 | 8192 bytes | 40 kB | 48 kB
api_key_scopes | 6 | 16 kB | 32 kB | 48 kB
badge_types | 3 | 16 kB | 32 kB | 48 kB
color_scheme_colors | 20 | 16 kB | 32 kB | 48 kB
onceoff_logs | 40 | 16 kB | 32 kB | 48 kB
permalinks | 24 | 16 kB | 32 kB | 48 kB
theme_modifier_sets | 6 | 16 kB | 32 kB | 48 kB
topic_timers | 3 | 8192 bytes | 40 kB | 48 kB
user_api_key_scopes | 2 | 16 kB | 32 kB | 48 kB
group_category_notification_defaults | 1 | 8192 bytes | 32 kB | 40 kB
group_requests | 0 | 8192 bytes | 32 kB | 40 kB
category_groups | 4 | 8192 bytes | 32 kB | 40 kB
tag_group_memberships | 7 | 8192 bytes | 32 kB | 40 kB
invited_groups | 1 | 8192 bytes | 32 kB | 40 kB
topic_groups | 47 | 8192 bytes | 32 kB | 40 kB
discourse_voting_votes | 4 | 8192 bytes | 32 kB | 40 kB
theme_translation_overrides | 0 | 8192 bytes | 24 kB | 32 kB
oauth2_user_infos | 0 | 8192 bytes | 24 kB | 32 kB
screened_urls | 0 | 8192 bytes | 24 kB | 32 kB
screened_emails | 0 | 8192 bytes | 24 kB | 32 kB
remote_themes | 3 | 16 kB | 16 kB | 32 kB
tag_groups | 1 | 16 kB | 16 kB | 32 kB
push_subscriptions | 13 | 16 kB | 16 kB | 32 kB
published_pages | 0 | 8192 bytes | 24 kB | 32 kB
theme_settings | 9 | 16 kB | 16 kB | 32 kB
imap_sync_logs | 0 | 8192 bytes | 24 kB | 32 kB
poll_options | 0 | 8192 bytes | 24 kB | 32 kB
embeddable_hosts | 0 | 16 kB | 16 kB | 32 kB
color_schemes | 2 | 16 kB | 16 kB | 32 kB
user_exports | 1 | 16 kB | 16 kB | 32 kB
user_field_options | 4 | 16 kB | 16 kB | 32 kB
user_fields | 7 | 16 kB | 16 kB | 32 kB
badge_groupings | 5 | 16 kB | 16 kB | 32 kB
backup_draft_posts | 0 | 8192 bytes | 24 kB | 32 kB
ar_internal_metadata | 1 | 16 kB | 16 kB | 32 kB
polls | 0 | 8192 bytes | 24 kB | 32 kB
poll_votes | 0 | 0 bytes | 32 kB | 32 kB
web_hook_event_types | 13 | 16 kB | 16 kB | 32 kB
single_sign_on_records | 0 | 8192 bytes | 24 kB | 32 kB
group_custom_fields | 0 | 8192 bytes | 16 kB | 24 kB
allowed_pm_users | 0 | 0 bytes | 24 kB | 24 kB
user_warnings | 0 | 0 bytes | 24 kB | 24 kB
user_ip_address_histories | 0 | 8192 bytes | 16 kB | 24 kB
user_open_ids | 0 | 8192 bytes | 16 kB | 24 kB
muted_users | 0 | 0 bytes | 24 kB | 24 kB
topic_embeds | 0 | 8192 bytes | 16 kB | 24 kB
post_action_types | 7 | 8192 bytes | 16 kB | 24 kB
message_bus | 0 | 8192 bytes | 16 kB | 24 kB
linked_topics | 0 | 0 bytes | 24 kB | 24 kB
post_details | 0 | 8192 bytes | 16 kB | 24 kB
ignored_users | 0 | 0 bytes | 24 kB | 24 kB
web_hook_events | 0 | 8192 bytes | 16 kB | 24 kB
translation_overrides | 0 | 8192 bytes | 16 kB | 24 kB
backup_draft_topics | 0 | 0 bytes | 24 kB | 24 kB
post_reply_keys | 0 | 0 bytes | 24 kB | 24 kB
custom_emojis | 0 | 8192 bytes | 16 kB | 24 kB
category_tags | 0 | 0 bytes | 24 kB | 24 kB
shared_drafts | 0 | 0 bytes | 24 kB | 24 kB
category_tag_groups | 0 | 0 bytes | 16 kB | 16 kB
group_archived_messages | 0 | 0 bytes | 16 kB | 16 kB
discourse_voting_category_settings | 0 | 0 bytes | 16 kB | 16 kB
developers | 0 | 0 bytes | 16 kB | 16 kB
web_hooks | 0 | 8192 bytes | 8192 bytes | 16 kB
shelved_notifications | 0 | 0 bytes | 16 kB | 16 kB
group_tag_notification_defaults | 0 | 0 bytes | 16 kB | 16 kB
reviewable_claimed_topics | 0 | 0 bytes | 16 kB | 16 kB
groups_web_hooks | 0 | 0 bytes | 8192 bytes | 8192 bytes
tags_web_hooks | 0 | 0 bytes | 8192 bytes | 8192 bytes
categories_web_hooks | 0 | 0 bytes | 8192 bytes | 8192 bytes
web_hook_event_types_hooks | 0 | 0 bytes | 8192 bytes | 8192 bytes
badge_posts | 0 | 0 bytes | 0 bytes | 0 bytes

```

Мы изменили некоторые настройки в файле app.yml:  
db\_shared\_buffers: «4096MB»  
db\_work\_mem: «400MB»  
UNICORN\_WORKERS: 16

```plaintext
## Это шаблон контейнера Docker Discourse «всё в одном» (standalone)
##
## После внесения изменений в этот файл вы ОБЯЗАТЕЛЬНО должны выполнить пересборку:
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ ОЧЕНЬ ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-файлы ЧРЕЗВЫЧАЙНО чувствительны к ошибкам в отступах или выравнивании!
## При необходимости проверьте этот файл на сайте http://www.yamllint.com/

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  # - "templates/sshd.template.yml"
  #- "templates/web.ratelimited.template.yml" # удалено, чтобы избежать ошибок 429 (слишком много запросов) https://meta.discourse.org/t/remove-the-ip-limits/185829
  - "templates/cloudflare.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Let's Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"

## Какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал тот же порт, что и другой веб-сервер (например, Apache или nginx),
## см. https://meta.discourse.org/t/17247 для получения подробной информации
expose:
  - "1010:80" # http
# - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers на максимум 25% от общего объема памяти.
  ## Будет установлено автоматически при загрузке на основе обнаруженного объема ОЗУ, либо вы можете переопределить это значение.
  db_shared_buffers: "4096MB"

  ## Может улучшить производительность сортировки, но увеличивает использование памяти на каждое соединение.
  db_work_mem: "400MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Сколько одновременных веб-запросов поддерживается? Зависит от объема памяти и количества ядер процессора.
  ## Будет установлено автоматически при загрузке на основе обнаруженного количества процессоров, либо вы можете переопределить это значение.
  UNICORN_WORKERS: 16

  ## TODO: Доменное имя, на которое будет реагировать этот экземпляр Discourse
  ## Обязательно. Discourse не будет работать с чистым IP-адресом.
  DISCOURSE_HOSTNAME: "howtodiscuss.com"

  ## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
  ## именем хоста (-h option), что указано выше (по умолчанию "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Список email-адресов через запятую, которые станут администраторами и разработчиками
  ## при первоначальной регистрации, например 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: "smtp_username"

  ## TODO: SMTP-сервер, используемый для проверки новых учетных записей и отправки уведомлений
  ## Адрес SMTP, имя пользователя и пароль обязательны
  # ВНИМАНИЕ: символ '#' в пароле SMTP может вызвать проблемы!
  DISCOURSE_SMTP_ADDRESS: smtp.example.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: admin@example.com
  DISCOURSE_SMTP_PASSWORD: p@$$word
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com # (требуется некоторыми провайдерами)
  #DISCOURSE_NOTIFICATION_EMAIL: nobody@discourse.example.com # (адрес, с которого отправляются уведомления)

  #DISCOURSE_SMTP_ENABLE_START_TLS: true # (необязательно, по умолчанию true)

  ## Если вы добавили шаблон Let's Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
  #LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

  ## Адрес http или https CDN для этого экземпляра Discourse (настроен на получение)
  ## см. https://meta.discourse.org/t/14857 для получения подробной информации
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для получения подробной информации
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-sitemap.git
          #- git clone https://github.com/discourse/discourse-math.git # кастомный плагин для поддержки JAX математических формул
          - git clone https://github.com/discourse/discourse-solved.git # кастомный плагин для вопросов и ответов и выбора лучшего ответа
          #- git clone https://github.com/discourse/discourse-voting.git # кастомный плагин для голосования только по темам
          #- git clone https://github.com/discourse/discourse-yearly-review.git # кастомный плагин для автоматической публикации годовой темы о активности форума
          - git clone https://github.com/discourse/discourse-user-notes.git # кастомный плагин, позволяющий сотрудникам добавлять заметки о пользователе
          - git clone https://github.com/paviliondev/discourse-question-answer.git # кастомный неофициальный плагин для голосования в стиле Stack Overflow по сообщениям
          - git clone https://github.com/discourse/discourse-adplugin.git # кастомный официальный плагин для рекламы
          #- git clone https://github.com/discourse/discourse-whos-online.git # кастомный плагин для просмотра, кто онлайн
          - git clone https://github.com/paviliondev/discourse-topic-previews.git # кастомный плагин для красивого отображения превью тем
          #- git clone https://github.com/paviliondev/discourse-ratings.git # кастомный плагин, позволяющий пользователям оценивать темы
          #- git clone https://github.com/discourse/discourse-cakeday.git # официальный плагин для празднования дней рождения и годовщин регистрации
          #- git clone https://github.com/discourse/discourse-saved-searches.git # официальный плагин для уведомлений о сохраненных поисках
          #- git clone https://github.com/paviliondev/discourse-follow.git # кастомный плагин, позволяющий пользователям подписываться друг на друга
          - git clone https://github.com/discourse/discourse-assign.git # кастомный плагин для назначения тем сотрудникам
          - git clone https://github.com/paviliondev/x-discourse-tlp-thumbnail.git # кастомный плагин для отображения миниатюр из изображений CDN
          - git clone https://github.com/discourse/discourse-prometheus.git # кастомный плагин для мониторинга медленной скорости
          - git clone https://github.com/discourse/discourse-push-notifications.git # плагин для push-уведомлений
## Любые пользовательские команды для запуска после сборки
run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес электронной почты «От» для вашей первой регистрации, раскомментируйте и измените:
  ## После получения первого письма о регистрации снова закомментируйте строку. Это нужно выполнить только один раз.
  - exec: rails r "SiteSetting.notification_email='noreply@howtodiscuss.com'"
  - exec: echo "Конец пользовательских команд"
  ## Для отображения реальных IP-адресов https://meta.discourse.org/t/troubleshooting-a-429-rate-limit/81060/19
  # Это «магия» для передачи номеров IP-адресов в Discourse
  # См. https://meta.discourse.org/t/last-ip-address-and-action-dispatch-trusted-proxies/50098/3?u=pfaffman
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 172.17.0.0/24;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {

```

---

_[View the full topic](https://meta.discourse.org/t/discourse-overloaded-real-traffic-or-ddos-100-cpu-usage-despite-of-decent-traffic-and-high-specs-server/203976)._
