• Как настроить centos 7 под большое количество tcp соединений?

    @solalex
    cat /etc/sysctl.conf
    # Kernel sysctl configuration file for Red Hat Linux
    #
    # For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
    # sysctl.conf(5) for more details.
    
    # Controls IP packet forwarding
    net.ipv4.ip_forward = 1
    
    # Controls source route verification
    net.ipv4.conf.default.rp_filter = 1
    
    # Do not accept source routing
    net.ipv4.conf.default.accept_source_route = 0
    
    # Controls the System Request debugging functionality of the kernel
    kernel.sysrq = 0
    
    # Controls whether core dumps will append the PID to the core filename
    # Useful for debugging multi-threaded applications
    kernel.core_uses_pid = 1
    
    # Controls the use of TCP syncookies
    net.ipv4.tcp_syncookies = 1
    
    # Controls the maximum size of a message, in bytes
    kernel.msgmnb = 65536
    
    # Controls the default maxmimum size of a mesage queue
    kernel.msgmax = 65536
    
    # Controls the maximum shared segment size, in bytes
    kernel.shmmax = 68719476736
    
    # Controls the maximum number of shared memory segments, in pages
    kernel.shmall = 4294967296
    
    ##############
    # nat tuning #
    ##############
    
    # Увеличиваем количество conntrack соединений, необходимо менять значение
    # по умолчанию только на высоконагруженных серверах.
    # ядро 2.6 лучше воспринимают размеры таблиц равные степени 2, так что можно установить
    # CONNTRACK_MAX и HASHSIZE равные 1048576 (2^20) etc...
    # net.ipv4.netfilter.ip_conntrack_max = 4194304
    # net.nf_conntrack_max = 4194304
    net.ipv4.netfilter.ip_conntrack_max = 9437184
    net.nf_conntrack_max = 9437184
    
    
    # increase TCP max buffer size setable using setsockopt()
    # изменение размеров буферов для приема и отправки данных через сокеты, tcp-memory
    net.core.rmem_default = 16777216
    net.core.rmem_max = 16777216
    net.core.wmem_default = 16777216
    net.core.wmem_max = 16777216
    # increase Linux autotuning TCP buffer limits
    # min, default, and max number of bytes to use
    # set max to at least 4MB, or higher if you use very high BDP paths
    # net.ipv4.tcp_rmem = 4096 87380 16777216
    # net.ipv4.tcp_wmem = 4096 65536 16777216
    net.ipv4.tcp_rmem = 4096 16777216 16777216
    net.ipv4.tcp_wmem = 4096 16777216 16777216
    
    # Максимальное число сокетов в состоянии TIME-WAIT одновременно. При превышении этого порога лишний сокет разрушается 
    # и пишется сообщение в системный журнал. Цель этой переменной – предотвращение простейших разновидностей DoS-атак
    # Значение по-умолчанию –     180000
    net.ipv4.tcp_max_tw_buckets = 1800000
    
    # Переменная задает максимальное число осиротевших (не связанных ни с
    # одним процессом) сокетов. Если это число будет превышено, то такие
    # соединения разрываются, а в системный журнал пишется предупреждение. Это
    # ограничение существует исключительно ради предотвращения простейших
    # разновидностей DoS-атак. 
    net.ipv4.tcp_max_orphans = 262144
    # net.ipv4.tcp_max_orphans = 65536
    
    # net.ipv4.tcp_max_syn_backlog = 262144
    
    # When in a non-Napi (or Interrupt) mode, this counter indicates that the stack is dropping packets.
    # net.core.netdev_max_backlog = 10000
    net.core.netdev_max_backlog = 30000
    
    # net.core.somaxconn = 262144
    
    # These ensure that TIME_WAIT ports either get reused or closed fast.
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    
    # защита от syn-флуда
    net.ipv4.tcp_syncookies=1
    
    # запрет приёма ICMP-редиректов
    # net.ipv4.conf.all.accept_redirects = 0
    # net.ipv4.conf.default.accept_redirects = 0
    
    # игнорируем широковещательные ICMP-запросы
    net.ipv4.icmp_echo_ignore_broadcasts=1
    
    # игнорируем пакеты, в которых указан путь до источника
    net.ipv4.conf.all.accept_source_route=0
    
    # Укажем диапазон портов которые разрешено использовать в качестве
    # локальных. По умолчанию этот диапазон достаточно мал, и при высокой
    # нагрузке вам их может просто не хватить
    # net.ipv4.ip_local_port_range = 16384 61000
    net.ipv4.ip_local_port_range = 1024 65535
    
    # Уменьшим время которое используется для сообщений
    # о поддержке keep alive соединений
    net.ipv4.tcp_keepalive_time = 7200
    
    # Уменьшим время до закрытия TCP соединения, данный параметр стоит менять
    # только на высоко нагруженных серверах.
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 7200
    
    # Другие таймауты:
    net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 60
    net.ipv4.netfilter.ip_conntrack_udp_timeout = 60
    net.ipv4.netfilter.ip_conntrack_generic_timeout = 3600
    
    # В случае kernel panic reboot через 10 секунд (panic может возникнуть при высокой нагрузке и irqbalance, например)
    kernel.panic = 10
    
    # чтобы не переполнялась арп-таблица (пишет в логах kernel: ipv4: Neighbour table overflow)
    net.ipv4.neigh.default.gc_thresh1 = 1024
    net.ipv4.neigh.default.gc_thresh2 = 2048
    net.ipv4.neigh.default.gc_thresh3 = 4096
    Ответ написан
    Комментировать
  • Как объединить два каталога?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    до:
    % tree -h test
    test
    ├── [4.0K]  dir1
    │   ├── [4.0K]  a
    │   │   ├── [ 60M]  file1.txt
    │   │   └── [1.0M]  file2.txt
    │   ├── [4.0K]  b
    │   │   └── [ 20M]  file3.txt
    │   └── [4.0K]  c
    │       └── [1.0M]  file4.txt
    └── [4.0K]  dir2
        ├── [4.0K]  a
        │   ├── [ 10M]  file1.txt
        │   └── [1.0M]  file6.txt
        ├── [4.0K]  b
        │   ├── [ 50M]  file3.txt
        │   └── [1.0M]  file8.txt
        └── [4.0K]  c
            ├── [1.0M]  file10.txt
            └── [1.0M]  file9.txt
    
    8 directories, 10 files

    не копируем, а создаём жесткие ссылки:
    % cp -lrf test/dir{1/*,2} && rm -rf test/dir1/*

    после:
    % tree -h test
    test
    ├── [4.0K]  dir1
    └── [4.0K]  dir2
        ├── [4.0K]  a
        │   ├── [ 60M]  file1.txt
        │   ├── [1.0M]  file2.txt
        │   └── [1.0M]  file6.txt
        ├── [4.0K]  b
        │   ├── [ 20M]  file3.txt
        │   └── [1.0M]  file8.txt
        └── [4.0K]  c
            ├── [1.0M]  file10.txt
            ├── [1.0M]  file4.txt
            └── [1.0M]  file9.txt
    
    5 directories, 8 files
    Ответ написан
    1 комментарий
  • Что не так с диском?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Что. За. Диск?

    smartctl пишет ошибки, но не всегда они адекватны. Хотя в подавляющем большинстве стоит на них обращать внимание. Если вместе с ошибками S.M.A.R.T. диск проявляет нестабильность, значит ждём приказов долго жить. Если нет, то внимательно читаем данные, идём к вендору и смотрим особенности реализации. Вообще, никакой критерий ещё не достиг своего дна. Что до ошибок, то они могут быть по разным причинам (питание, особенности прошивки, глупость контроллера), попробуйте записать диск полностью нулями (рандомом), а потом отформатируйте.
    Ответ написан
    5 комментариев
  • Что не так с диском?

    plin2s
    @plin2s
    IT, инженер
    Посыпался диск. id187=199, один реаллокейт, ненулевые id197 и id198, id195 != id1 еще и id199
    Не вижу модель диска, но даже 52 градуса это не очень критично.
    По поводу " Error 126" - это просто порядковый номер ошибки, у вас там чуть выше есть запись "ATA Error count: 126". Просто отображаются только последние из них.
    Все очень плохо.
    Ответ написан
    4 комментария
  • Ошибки kernel Centos 7 как исправить?

    TrueBers
    @TrueBers
    Гуглю за еду
    ERST — это таблица ошибок в ACPI для сериализации и сохранении их в прошивку и последующего анализа. Т. е. тупо крашдампы, dmesg и прочие паники в биос пишутся, если ребутнулось, и вы не успели увидеть чё к чему.

    Обычно эта таблица — простой блоб в ACPI биоса. Соответственно, попробуйте обновить биос, либо вообще вырубите (cmdline+=erst_disable), если не пользуетесь этим.
    Ответ написан
    1 комментарий
  • Почему MySQL использует только часть индекса?

    bigton
    @bigton
    Web-программист
    Но аналогичный запрос UPDATE выполняется недопустимо долго (286.0228 сек.)
    UPDATE `test` SET `lock` = 123456 WHERE `lock` = 0 ORDER BY `time` LIMIT 1000


    Может быть потому что по lock есть индекс и это время получается из-за его перестроения?
    Ответ написан
    Комментировать