Score:0

CentOS: Redis ข้อ จำกัด การเชื่อมต่อไคลเอนต์สูงสุด

ธง um

ฉันใช้เซิร์ฟเวอร์แคช Redis บน CentOS โดยที่ Redis ยอมรับการเชื่อมต่อไคลเอ็นต์บนพอร์ต TCP การฟังที่กำหนดค่าไว้ ฉันกำลังพยายามหาข้อจำกัดที่ระบบปฏิบัติการนำไปใช้กับจำนวนการเชื่อมต่อที่อนุญาตไปยังพอร์ตเดียวที่กำหนดค่าไว้สำหรับ redis

ผู้ใช้ที่ใช้คือ ราก ตามที่ปรากฏ:

[root@server-001]# ps -ef | grep -i redis 
รูท 19595 1 9 มิ.ย. 26 ? 09:43:07 /usr/local/bin/redis-server 0.0.0.0:6379

ตอนนี้ฉันถูกหลอกด้วยปัจจัยหลายอย่าง:

อันดับที่ 1: ค่าของ file-max คือ:

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

อันดับที่ 2: มูลค่าของ limits.conf:

[root@server-001]# cat /etc/security/limits.d/20-nproc.conf 
# ขีดจำกัดเริ่มต้นสำหรับจำนวนกระบวนการของผู้ใช้ที่จะป้องกัน
#อุบัติเหตุส้อมระเบิด
# ดู rhbz #432903 สำหรับเหตุผล

* ซอฟต์ nproc 4096
รูตซอฟต์ nproc ไม่จำกัด

อันดับ 3: ขีดจำกัดซอฟต์และฮาร์ดของตัวอธิบายไฟล์:

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

ตอนนี้ ฉันรู้ว่าปัจจัยที่แท้จริงที่จำกัดการเชื่อมต่อกับพอร์ตเดียวคือตัวอธิบายไฟล์ ซึ่งฉันต้องเปลี่ยนเพื่อให้แน่ใจว่าเซิร์ฟเวอร์ redis ยอมรับไคลเอ็นต์มากที่สุดเท่าที่จะเป็นไปได้

Score:1
ธง it

ใช้ ลูกค้าสูงสุด 4096 บน redis.conf

เป็นโมฆะ adjustmentOpenFilesLimit (เป็นโมฆะ) {
rlim_t maxfiles = server.maxclients+CONFIG_MIN_RESERVED_FDS;
โครงสร้าง rlimit ขีด จำกัด ;

ถ้า (getrlimit(RLIMIT_NOFILE,&limit) == -1) {
    serverLog(LL_WARNING,"ไม่สามารถรับขีดจำกัด NOFILE ปัจจุบัน (%s), สมมติว่าเป็น 1024 และตั้งค่าคอนฟิกไคลเอนต์สูงสุดตามนั้น",
        strerror(เออโน));
    server.maxclients = 1024-CONFIG_MIN_RESERVED_FDS;
} อื่น {
    rlim_t oldlimit = limit.rlim_cur;

    /* กำหนดจำนวนไฟล์สูงสุดหากขีดจำกัดปัจจุบันไม่เพียงพอ
     * สำหรับความต้องการของเรา */
    ถ้า (oldlimit <maxfiles) {
        rlim_t ขีด จำกัด ที่ดีที่สุด;
        int setrlimit_error = 0;

        /* พยายามตั้งค่าขีดจำกัดของไฟล์ให้ตรงกับ 'maxfiles' หรืออย่างน้อยที่สุด
         * เป็นค่าที่สูงกว่า รองรับน้อยกว่า maxfiles */
        bestlimit = maxfiles;
        ในขณะที่ (bestlimit > oldlimit) {
            rlim_t decr_step = 16;

            limit.rlim_cur = ขีด จำกัด ที่ดีที่สุด;
            limit.rlim_max = ขีด จำกัด ที่ดีที่สุด;
            ถ้า (setrlimit(RLIMIT_NOFILE,&limit) != -1) แตก;
            setrlimit_error = เออโน;

            /* เราไม่สามารถตั้งค่าการจำกัดไฟล์เป็น 'bestlimit' ลองกับ
             * ขีดจำกัดที่เล็กลงจะลดลงทีละน้อย FDs ต่อการวนซ้ำ */
            ถ้า (bestlimit < decr_step) แตก;
            bestlimit -= decr_step;
        }

        /* สมมติว่าขีดจำกัดที่เราได้รับในตอนแรกยังคงใช้ได้ ถ้า
         * ความพยายามครั้งล่าสุดของเราต่ำกว่านี้ */
        ถ้า (bestlimit < oldlimit) bestlimit = oldlimit;

        ถ้า (bestlimit <maxfiles) {
            int old_maxclients ที่ไม่ได้ลงนาม = server.maxclients;
            server.maxclients = bestlimit-CONFIG_MIN_RESERVED_FDS;
            /* maxclients ไม่ได้ลงนาม ดังนั้นอาจล้น: ตามลำดับ
             * เพื่อตรวจสอบว่า maxclients ตอนนี้มีเหตุผลน้อยกว่า 1 หรือไม่
             * เราทดสอบทางอ้อมผ่าน bestlimit */
            ถ้า (bestlimit <= CONFIG_MIN_RESERVED_FDS) {
                serverLog(LL_WARNING,"'ulimit -n' ปัจจุบันของคุณ "
                    "ของ %llu ไม่เพียงพอสำหรับเซิร์ฟเวอร์ที่จะเริ่มต้น "
                    "โปรดเพิ่มขีดจำกัดการเปิดไฟล์ของคุณเป็นอย่างน้อย"
                    "%llu กำลังออก",
                    (ไม่ได้ลงนามยาวยาว) oldlimit,
                    (ไม่ได้ลงชื่อยาวยาว) maxfiles);
                ทางออก (1);
            }
            serverLog(LL_WARNING,"คุณร้องขอไคลเอ็นต์สูงสุด %d "
                "ต้องการตัวอธิบายไฟล์อย่างน้อย %llu max",
                old_maxclients,
                (ไม่ได้ลงชื่อยาวยาว) maxfiles);
            serverLog(LL_WARNING,"เซิร์ฟเวอร์ไม่สามารถตั้งค่าไฟล์ที่เปิดสูงสุดได้"
                "เป็น %llu เนื่องจากข้อผิดพลาดของระบบปฏิบัติการ: %s",
                (ไม่ได้ลงนาม long long) maxfiles, strerror(setrlimit_error));
            serverLog(LL_WARNING,"ไฟล์ที่เปิดสูงสุดในปัจจุบันคือ %llu "
                "ลูกค้าสูงสุดลดลงเหลือ %d เพื่อชดเชย "
                "ขีด จำกัด ต่ำ"
                "ถ้าคุณต้องการ maxclients ที่สูงขึ้น ให้เพิ่ม 'ulimit -n'",
                (ยาวยาวที่ไม่ได้ลงนาม) bestlimit, server.maxclients);
        } อื่น {
            serverLog(LL_NOTICE,"เพิ่มจำนวนไฟล์เปิดสูงสุด"
                "เป็น %llu (แต่เดิมตั้งค่าเป็น %llu)",
                (ไม่ได้ลงชื่อยาวยาว) maxfiles
                (ยาวยาวที่ไม่ได้ลงนาม) oldlimit);
        }
    }
}

}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา