Puncte:0

CentOS: limitarea maximă a conexiunii clientului Redis

drapel um

Folosesc serverul de cache Redis pe CentOS, unde Redis acceptă conexiuni clienți pe portul TCP de ascultare configurat. Încerc să îmi dau seama care sunt limitele aplicate de sistemul de operare numărului de conexiuni permise la un singur port configurat pentru redis.

Utilizatorul utilizat este rădăcină așa cum se arată:

[root@server-001]# ps -ef | grep -i redis 
root 19595 1 9 Jun26 ? 09:43:07 /usr/local/bin/redis-server 0.0.0.0:6379

Acum sunt păcălit de mai mulți factori:

1: valoarea fișierului-max este:

[root@server-001]# cat /proc/sys/fs/file-max
6518496

2: valoarea de limite.conf:

[root@server-001]# cat /etc/security/limits.d/20-nproc.conf 
# Limită implicită pentru numărul de procese ale utilizatorului de prevenit
# bombe cu furci accidentale.
# Vezi rhbz #432903 pentru raționament.

* soft nproc 4096
root soft nproc nelimitat

3: Limita soft și hard a descriptorilor de fișiere:

[root@server-001]# ulimit -Hn
4096
[root@server-001]# ulimit -Sn
1024

Acum, știind că factorul real limitează conexiunea la un singur port sunt descriptorii de fișiere, pe care trebuie să-l schimb pentru a mă asigura că serverul redis acceptă cât mai mulți clienți posibil?

Puncte:1
drapel it

utilizare maxclients 4096 pe redis.conf

void adjustOpenFilesLimit(void) {
rlim_t maxfiles = server.maxclients+CONFIG_MIN_RESERVED_FDS;
struct rlimit limit;

if (getrlimit(RLIMIT_NOFILE,&limit) == -1) {
    serverLog(LL_WARNING,"Nu se poate obține limita curentă NOFILE (%s), presupunând 1024 și setând configurația maximă a clienților în consecință.",
        strerror(errno));
    server.maxclients = 1024-CONFIG_MIN_RESERVED_FDS;
} altfel {
    rlim_t oldlimit = limit.rlim_cur;

    /* Setați numărul maxim de fișiere dacă limita curentă nu este suficientă
     *pentru nevoile noastre. */
    if (oldlimit < maxfiles) {
        rlim_t bestlimit;
        int setrlimit_error = 0;

        /* Încercați să setați limita de fișiere pentru a se potrivi cu „maxfiles” sau cel puțin
         * la valoarea mai mare acceptată mai puțin decât maxfiles. */
        bestlimit = maxfiles;
        while(bestlimit > oldlimit) {
            rlim_t decr_step = 16;

            limit.rlim_cur = bestlimit;
            limit.rlim_max = bestlimit;
            if (setrlimit(RLIMIT_NOFILE,&limit) != -1) break;
            setrlimit_error = errno;

            /* Nu am reușit să setăm limita de fișiere la „bestlimit”. Incearca cu a
             * scăderea limită mai mică cu câteva FD per iterație. */
            if (bestlimit < decr_step) break;
            bestlimit -= decr_step;
        }

        /* Să presupunem că limita pe care o obținem inițial este încă valabilă dacă
         * ultima noastră încercare a fost chiar mai mică. */
        if (bestlimit < oldlimit) bestlimit = limita veche;

        if (bestlimit < maxfiles) {
            unsigned int old_maxclients = server.maxclients;
            server.maxclients = bestlimit-CONFIG_MIN_RESERVED_FDS;
            /* maxclients este nesemnat, așa că poate depăși: în ordine
             * pentru a verifica dacă maxclients este acum logic mai mic de 1
             * testăm indirect prin bestlimit. */
            dacă (cea mai bună limită <= CONFIG_MIN_RESERVED_FDS) {
                serverLog(LL_WARNING,"Ulimita -n" dvs. actuală "
                    „din %llu nu este suficient pentru ca serverul să pornească.”
                    „Vă rugăm să creșteți limita de fișiere deschise la cel puțin”
                    "%llu. Se iese.",
                    (nesemnat lung lung) oldlimit,
                    (unsigned long long) maxfiles);
                ieșire(1);
            }
            serverLog(LL_WARNING,"Ați solicitat numărul maxim de clienți de %d"
                „necesită cel puțin %llu max descriptori de fișiere.”,
                old_maxclients,
                (unsigned long long) maxfiles);
            serverLog(LL_WARNING,"Serverul nu poate seta fișiere deschise maxime"
                „la %llu din cauza erorii sistemului de operare: %s.”,
                (unsigned long long) maxfiles, strerror(setrlimit_error));
            serverLog(LL_WARNING,"Fișierele deschise maxime curente sunt %llu."
                „maxclients a fost redus la %d pentru a compensa”
                „ulimită scăzută”.
                „Dacă aveți nevoie de clienți maxim mai mari, creșteți „ulimit -n”.”,
                (unsigned long long) bestlimit, server.maxclients);
        } altfel {
            serverLog(LL_NOTICE,"Număr maxim crescut de fișiere deschise"
                „la %llu (a fost setat inițial la %llu).”,
                (nesemnate lung lung) maxfiles,
                (nesemnat long long) oldlimit);
        }
    }
}

}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.