12.3 рдорд┐рд▓рд┐рдпрди рд╕рдорд╡рд░реНрддреА рд╡реЗрдм рдкреЙрдХреЗрдЯреНрд╕

WebSockets рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА CPU рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдкрд░реНрдпрд╛рдкреНрдд рд▓реЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдРрд╕реА рдХрдИ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдЖрдкрдХреЛ рдкрд╛рд░ рдкрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдмрд╕реЙрдлрд╝реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдорд╛рдВрдЧ рдкрд░ рдЕрдзрд┐рдХ рд╕реАрдкреАрдпреВ рд╣реИред рдЙрд╕реА рд╕рдордп рдЖрдкрдХреЛ рд▓рд╛рдЦреЛрдВ рдХрдиреЗрдХреНрд╢рди рд╣реЛрдиреЗ рдкрд░ рдЦреБрд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реИрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдореИрдВ рдмрд╣реБрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ "рдмрд░реНрдирдЖрдЙрдЯ" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╕реАрдорд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдП рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ Lua Application Server - LAppS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ LAppS рдЙрдЪреНрдЪ рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред


рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдбрд┐рдЯреЗрд▓реНрд╕


рдЪреБрдиреМрддрд┐рдпрд╛рдВ


рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рдирдХрд▓реА рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ, рддрдм рддрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рд╕реЗ рд╕рднреА WebSockets рдХреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдорд╛рд╕реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ RNG рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реЛрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЖрд░рдЬреАрдЬреА рдХреЛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ред рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ - рдмрд╣реБрдд рд╕реА рд╕реАрдкреАрдпреВ рд╢рдХреНрддрд┐ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рд╕рд░реНрд╡рд░ рд╣реИрдВ: рдПрдХ рджреЛрд╣рд░реА рдЗрдВрдЯреЗрд▓ рдЧреЛрд▓реНрдб 6148 рд╕реАрдкреАрдпреВ (рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ 40 рдХреЛрд░) 256 рдЬреАрдмреА рд░реИрдо (рдбреАрдбреАрдЖрд░ 4-2666) рдФрд░ рдПрдХ рдХреНрд╡рд╛рдб рдЗрдВрдЯреЗрд▓ рдкреНрд▓реЗрдЯрд┐рдирдо 8180 рд╕реАрдкреАрдпреВ (рдХреБрд▓ 112 рдХреЛрд░) 384 рдЬреАрдмреА рд░реИрдо (рдбреАрдбреАрдЖрд░ 4-2666) ред рдореИрдВ рдЙрдирдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдП рдФрд░ рд╕рд░реНрд╡рд░ рдмреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реВрдВрдЧрд╛ред


рджреВрд╕рд░реА рдЪреБрдиреМрддреА - рд╡реЗрдмрд╕реНрдХреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдХрд╛рдлреА рддреЗрдЬрд╝ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ LAppS ( cws ) рдХреЗ рд▓рд┐рдП рдПрдХ WebSockets рдХреНрд▓рд╛рдЗрдВрдЯ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред


рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯрдЕрдк


рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рджреЛрд╣рд░реА рдкреЛрд░реНрдЯ 10GbE рдХрд╛рд░реНрдб рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдХреЗ рдкреЛрд░реНрдЯ 1 рдХреЛ рдПрдХ рдмреЙрдиреНрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпреЗ рдХрд╛рд░реНрдб рдпрд╛ рддреЛ рдкреЛрд░реНрдЯреНрд╕ рдЖрд░рдЖрд░ рдореЛрдб рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдб рдХреЗ рдкреЛрд░реНрдЯ 2 рдХреЛ рдПрдХ рдИрдерд░рдиреЗрдЯ рдмреИрдХрдЕрдк рдкрд░ рдХрдиреЗрдХреНрдЯреЗрдб, рдПрдХреНрдЯрд┐рд╡-рдмреИрдХрдЕрдк рдореЛрдб рдореЗрдВ рдПрдХ рдмреЙрдиреНрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рд░реНрд╡рд░ RHEL 7.6 рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ gcc-4.8.5 рдХреЗ рдмрдЬрд╛рдп рдЖрдзреБрдирд┐рдХ рд╕рдВрдХрд▓рдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрддреЛрдВ рд╕реЗ gcc-8.3 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реЗрдЯрдЕрдк рдирд╣реАрдВ, рдлрд┐рд░ рднреА рднрд┐рдЦрд╛рд░реА рдЪрдпрдирдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред


рд╕рд░реНрд╡рд░ рдП (2xGold 6148) рдкрд░ рд╕реАрдкреАрдпреВ рдореЗрдВ рд╕рд░реНрд╡рд░ рдмреА (4xPl Platinum 8180) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд░реНрд╡рд░ рдмреА рдореЗрдВ рдЕрдзрд┐рдХ рдХреЛрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рдП рдкрд░ рдПрдХ рдЗрдХреЛ рд╕рд░реНрд╡рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдмреА рдкрд░ рдЗрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рдореИрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд▓рд╛рдЦреЛрдВ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рд╕рд╛рде LAppS рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЙрдЪреНрдЪ рднрд╛рд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдВрдб рдЕрдзрд┐рдХрддрдо рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрдиреЗрдХреНрд╢рди рд░рд╛рд╢рд┐ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рддреЗрдЬреА рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрд░ рдкреАрд╕реА рдкрд░ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рд╣реИрдВ рдЬреЛ рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореЗрд░реЗ рд╣реЛрдо рдкреАрд╕реА рдореЗрдВ рдПрдХ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7-7700 рд╕реАрдкреАрдпреВ 3.6GHz (4.0GHz рдЯрд░реНрдмреЛ) рд╣реИ рдЬрд┐рд╕рдореЗрдВ 4 рдХреЛрд░ рдФрд░ 32GB DDR4-2400 рд░реИрдо рд╣реИред рдпрд╣ рдкреАрд╕реА Gentoo рдХреЛ 4.14.72 рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддрд╛ рд╣реИред


рд╕реНрдкреЗрдХреНрдЯрд░ рдФрд░ рдореЗрд▓реНрдЯрдбрд╛рдЙрди рдкреИрдЪ рд╕реНрддрд░
  • рд╣реЛрдо рдкреАрд╕реА
    /sys/devices/system/cpu/vulnerabilities/l1tf:Mitigation: PTE Inversion; VMX: conditional cache flushes, SMT vulnerable /sys/devices/system/cpu/vulnerabilities/meltdown:Mitigation: PTI /sys/devices/system/cpu/vulnerabilities/spec_store_bypass:Mitigation: Speculative Store Bypass disabled via prctl and seccomp /sys/devices/system/cpu/vulnerabilities/spectre_v1:Mitigation: __user pointer sanitization /sys/devices/system/cpu/vulnerabilities/spectre_v2:Vulnerable: Minimal generic ASM retpoline, IBPB, IBRS_FW 
  • рд╕рд░реНрд╡рд░ рдП рдФрд░ рдмреА
     /sys/kernel/debug/x86/ibpb_enabled : 1 /sys/kernel/debug/x86/pti_enabled : 1 /sys/kernel/debug/x86/ssbd_enabled : 1 /sys/kernel/debug/x86/ibrs_enabled : 1 /sys/kernel/debug/x86/retp_enabled : 3 

рдореИрдВ рд╕рд░реНрд╡рд░ рдП рдФрд░ рдмреА рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЛрдЯ рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдпреЗ рдкреИрдЪ рд╕рдХреНрд╖рдо рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред


рдореЗрд░реЗ рд╣реЛрдо рдкреАрд╕реА рдкрд░ рдкреИрдЪ рдХрд╛ рд╕реНрддрд░ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред


LAppS рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ 0.8.1


рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ рдФрд░ рдирд┐рдпрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

LAppS luajit-2.0.5 рдпрд╛ рдЙрдЪреНрдЪрддрд░, libcrypto ++ 8.2 рдФрд░ wolfSSL-3.15.7 рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ RHEL 7.6 рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред


рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ / usr / рд╕реНрдерд╛рдиреАрдп рд╣реИред рдпрд╣рд╛рдБ рднреЗрдбрд╝рд┐рдпрд╛рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрддреНрдо-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рднрд╛рдЧ рд╣реИ


 ADD https://github.com/wolfSSL/wolfssl/archive/v3.15.7-stable.tar.gz ${WORKSPACE} RUN tar xzvf v3.15.7-stable.tar.gz WORKDIR ${WORKSPACE}/wolfssl-3.15.7-stable RUN ./autogen.sh RUN ./configure CFLAGS="-pipe -O2 -march=native -mtune=native -fomit-frame-pointer -fstack-check -fstack-protector-strong -mfpmath=sse -msse2avx -mavx2 -ftree-vectorize -funroll-loops -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT -DWC_RSA_BLINDING" --prefix=/usr/local --enable-tls13 --enable-openssh --enable-aesni --enable-intelasm --enable-keygen --enable-certgen --enable-certreq --enable-curve25519 --enable-ed25519 --enable-intelasm --enable-harden RUN make -j40 all RUN make install 

рдФрд░ рдпрд╣рд╛рдБ libcrypto ++ рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ


 ADD https://github.com/weidai11/cryptopp/archive/CRYPTOPP_8_2_0.tar.gz ${WORKSPACE} RUN rm -rf ${WORKSPACE}/cryptopp-CRYPTOPP_8_2_0 RUN tar xzvf ${WORKSPACE}/CRYPTOPP_8_2_0.tar.gz WORKDIR ${WORKSPACE}/cryptopp-CRYPTOPP_8_2_0 RUN make CFLAGS="-pipe -O2 -march=native -mtune=native -fPIC -fomit-frame-pointer -fstack-check -fstack-protector-strong -mfpmath=sse -msse2avx -mavx2 -ftree-vectorize -funroll-loops" CXXFLAGS="-pipe -O2 -march=native -mtune=native -fPIC -fomit-frame-pointer -fstack-check -fstack-protector-strong -mfpmath=sse -msse2avx -mavx2 -ftree-vectorize -funroll-loops" -j40 libcryptopp.a libcryptopp.so RUN make install 

рдФрд░ рд▓реБрдЬрд┐рдд


 ADD http://luajit.org/download/LuaJIT-2.0.5.tar.gz ${WORKSPACE} WORKDIR ${WORKSPACE} RUN tar xzvf LuaJIT-2.0.5.tar.gz WORKDIR ${WORKSPACE}/LuaJIT-2.0.5 RUN env CFLAGS="-pipe -Wall -pthread -O2 -fPIC -march=native -mtune=native -mfpmath=sse -msse2avx -mavx2 -ftree-vectorize -funroll-loops -fstack-check -fstack-protector-strong -fno-omit-frame-pointer" make -j40 all RUN make install 

LAppS рдХреА рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛, рдЬрд┐рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, Microsoft mimalloc рдХреА рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ (рд▓рдЧрднрдЧ 1%) рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП cmake-3.4 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╕рдордп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рдЕрдкрдиреЗ рд╣реЛрдо рдкреАрд╕реА рдкрд░, рдореИрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди рдорд┐рдореЗрд▓реЙрдХ рдХреЛ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ ред


рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд▓рд╛рдЯреНрд╕ рдХреЛ рдЪреЗрдХрдЖрдЙрдЯ рдХрд░реЗрдВ:


 WORKDIR ${WORKSPACE} RUN rm -rf ITCLib ITCFramework lar utils LAppS RUN git clone https://github.com/ITpC/ITCLib.git RUN git clone https://github.com/ITpC/utils.git RUN git clone https://github.com/ITpC/ITCFramework.git RUN git clone https://github.com/ITpC/LAppS.git RUN git clone https://github.com/ITpC/lar.git WORKDIR ${WORKSPACE}/LAppS 

рдЕрдм рд╣рдореЗрдВ nbproject рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рд╕реЗ "-lmimalloc" рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо LAppS рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реА рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ $ {WORKSPACE} / LAppS рд╣реИ)


 # find ./nbproject -type f -name "*.mk" -exec sed -i.bak -e 's/-lmimalloc//g' {} \; # find ./nbproject -type f -name "*.bak" -exec rm {} \; 

рдФрд░ рдЕрдм рд╣рдо LAppS рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред LAppS рдХрдИ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:


  • рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде
  • рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЬрдорд╛рд╡ рдХреЗ рдмрд┐рдирд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреНрдпреВрдирддрдо рдЖрдБрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдПрд▓рдПрдкреАрдПрд╕ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
  • SSL рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЖрдБрдХрдбрд╝рд╛ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ред

рдЕрдЧрд▓реЗ рдЪрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк / рдСрдкреНрдЯ / рд▓реИрдкреНрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ (рдпрд╛ sudo рдХреЗ рд╕рд╛рде рд░рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ)


рдЖрдЗрдП, рдПрд╕рдПрд╕рдПрд▓ рд╕рдкреЛрд░реНрдЯ рдФрд░ рд╕реНрдЯреИрдЯрд┐рд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ (рд╣рдо $ {WORKSPACE} / LAppS рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реИрдВ):


 # make clean # make CONF=Release.AVX2 install # make CONF=Release.AVX2.NO_STATS.NO_TLS install 

рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рд╣реИрдВ:


  • dist / Release.AVX2 / GNU-Linux / lapps.avx2
  • dist / Release.AVX2.NO_STATS.NO_TLS / GNU-Linux / lapps.avx2.nostats.notls

рдЙрдиреНрд╣реЗрдВ / рдСрдкреНрдЯ / рд▓реИрдкреНрд╕ / рдмрд┐рди рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Lua рдХреЗ рд▓рд┐рдП WebSockets рдХреНрд▓рд╛рдЗрдВрдЯ рдореЙрдбреНрдпреВрд▓ рд╣рдореЗрд╢рд╛ SSL рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдирд╣реАрдВ URI рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (ws: // рдпрд╛ wss: //) рд░рдирдЯрд╛рдЗрдо рдореЗрдВред


рдЯреЗрд╕реНрдЯ 1. рд╣реЛрдо рдкреАрд╕реА рдкрд░ рд╢реАрд░реНрд╖ рдкреНрд░рджрд░реНрд╢рдиред рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ред


рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд░реНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ 100 рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЪрд╛рд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдореБрдЭреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддреАрди IOWorkers рдФрд░ рдЪрд╛рд░ рдЗрдХреЛ рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ? рдореЗрд░реЗ рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ 4 рдХреЛрд░ рд╣реИрдВред


рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдЧреЗ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рд░реЛрдорд╛рдВрдЪрдХ рдирд╣реАрдВ рд╣реИред


Bellow рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП LAppS рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрджрдо рд╣реИрдВред


рд╕реНрд╡рдпрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдг рдкрддреНрд░


certgen.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ
 #!/bin/bash openssl genrsa -out example.org.key 2048 openssl req -new -key example.org.key -out example.org.csr openssl genrsa -out ca.key 2048 openssl req -new -x509 -key ca.key -out ca.crt openssl x509 -req -in example.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out example.org.crt cat example.org.crt ca.crt > example.org.bundle.crt 

/ рдСрдкреНрдЯ / lapps / conf / ssl рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рд╕реЗ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдмрди рдЬрд╛рдПрдВрдЧреАред рдпрд╣рд╛рдБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ:


certgen.sh рдЖрдЙрдЯрдкреБрдЯ
 # certgen.sh Generating RSA private key, 2048 bit long modulus .................................................................................................................................................................+++++ .....................................+++++ e is 65537 (0x010001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:KZ State or Province Name (full name) [Some-State]:none Locality Name (eg, city) []:Almaty Organization Name (eg, company) [Internet Widgits Pty Ltd]:NOORG.DO.NOT.FORGET.TO.REMOVE.FROM.BROWSER Organizational Unit Name (eg, section) []: Common Name (eg server FQDN or YOUR name) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Generating RSA private key, 2048 bit long modulus ...+++++ ............................................................................+++++ e is 65537 (0x010001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:KZ State or Province Name (full name) [Some-State]:none Locality Name (eg, city) []:Almaty Organization Name (eg, company) [Internet Widgits Pty Ltd]:none Organizational Unit Name (eg, section) []: Common Name (eg server FQDN or YOUR name) []:*.example.org Email Address []: Signature ok subject=C = KZ, ST = none, L = Almaty, O = NOORG.DO.NOT.FORGET.TO.REMOVE.FROM.BROWSER Getting CA Private Key 

LAppS рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рдпрд╣рд╛рдВ WebSockets рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ TLS 1.3 рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ, рдЗрд╕рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЙрддреНрдкрдиреНрди рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ 3 IOWorkers (LAppS рд╡рд┐рдХрд┐ рдореЗрдВ рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


/opt/lapps/etc/conf/ws.json
 { "listeners" : 2, "connection_weight": 1.0, "ip" : "0.0.0.0", "port" : 5083, "lapps_config_auto_save" : true , "workers" : { "workers": 3, "max_connections" : 40000, "auto_fragment" : false, "max_poll_events" : 256, "max_poll_wait_ms" : 10, "max_inbounds_skip" : 50, "input_buffer_size" : 2048 }, "acl" : { "policy" : "allow", "exclude" : [] }, "tls":true, "tls_server_version" : 4, "tls_client_version" : 4, "tls_certificates":{ "ca":"/opt/lapps/conf/ssl/ca.crt", "cert": "/opt/lapps/conf/ssl/example.org.bundle.crt", "key": "/opt/lapps/conf/ssl/example.org.key" } } 

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдПрдВ: рдЗрдХреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдЗрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ (рдмреЗрдВрдЪрдорд╛рд░реНрдХ), рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЪрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред


/opt/lapps/etc/conf/lapps.json
 { "directories": { "app_conf_dir": "etc", "applications": "apps", "deploy": "deploy", "tmp": "tmp", "workdir": "workdir" }, "services": { "echo": { "auto_start": true, "instances": 4, "internal": false, "max_inbound_message_size": 16777216, "protocol": "raw", "request_target": "/echo", "acl" : { "policy" : "allow", "exclude" : [] } }, "benchmark": { "auto_start": true, "instances" : 4, "internal": true, "preload": [ "nap", "cws", "time" ], "depends" : [ "echo" ] } } } 

рдЧреВрдВрдЬ рд╕реЗрд╡рд╛ рдмрд╣реБрдд рддреБрдЪреНрдЫ рд╣реИ:


рдЗрдХреЛ рд╕рд░реНрд╡рд┐рд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб
 echo = {} echo.__index = echo; echo.onStart=function() print("echo::onStart"); end echo.onDisconnect=function() end echo.onShutdown=function() print("echo::onShutdown()"); end echo.onMessage=function(handler,opcode, message) local result, errmsg=ws:send(handler,opcode,message); if(not result) then print("echo::OnMessage(): "..errmsg); end return result; end return echo 

рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ .ax_connections рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддрдм рддрдХ рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк LAASS рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рджреЗрддреЗред рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реНрдерд╛рдкрдирд╛ рдпрд╛ рдЧреВрдВрдЬ рдЕрдиреБрд░реЛрдз рдмрдордмрд╛рд░реА рдореЗрдВ рдХреЛрдИ рдард╣рд░рд╛рд╡ рдирд╣реАрдВ рд╣реИред Cws рдореЙрдбреНрдпреВрд▓ API WebSockets рдХреЗ рд▓рд┐рдП рд╡реЗрдм API рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╕рднреА рдмреЗрдВрдЪрдорд╛рд░реНрдХ .max_connections рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЬреБрдбрд╝реЗ рд╕реЙрдХреЗрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ.рдореИрд╕реЗрдЬ рднреЗрдЬрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж cws рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрдирд╛рдо рдСрдирдореЗрд╕реЗрдЬ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЙрд╕реА рд╕рдВрджреЗрд╢ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред


рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕рд░реНрд╡рд┐рд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб
 benchmark={} benchmark.__index=benchmark benchmark.init=function() end benchmark.messages_counter=0; benchmark.start_time=time.now(); benchmark.max_connections=100; benchmark.target="wss://127.0.0.1:5083/echo"; benchmark.message="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; benchmark.meter=function() benchmark.messages_counter=benchmark.messages_counter+1; local slice=time.now() - benchmark.start_time; if( slice >= 1000) then print(benchmark.messages_counter.." messages received per "..slice.."ms") benchmark.messages_counter=0; benchmark.start_time=time.now(); end end benchmark.run=function() local n=nap:new(); local counter=1; n:sleep(1); local array={}; local start=time.now(); while(#array < benchmark.max_connections) and (not must_stop()) do local sock, err_msg=cws:new(benchmark.target, { onopen=function(handler) local result, errstr=cws:send(handler,benchmark.message,2); if(not result) then print("Error on websocket send at handler "..handler..": "..errstr); end end, onmessage=function(handler,message,opcode) benchmark.meter(); cws:send(handler,message,opcode); end, onerror=function(handler, message) print("Client WebSocket connection is failed for socketfd "..handler..". Error: "..message); end, onclose=function(handler) print("Connection is closed for socketfd "..handler); end }); if(sock ~= nil) then table.insert(array,sock); else print(err_msg); err_msg=nil; collectgarbage("collect"); end -- poll events once per 10 outgoing connections -- this will improve the connection establishment speed if counter == 10 then cws:eventLoop(); counter=1 else counter = counter + 1; end end print("Sockets connected: "..#array); benchmark.start_time=time.now(); while not must_stop() do cws:eventLoop(); end for i=1,#array do array[i]:close(); cws:eventLoop(); end end return benchmark; 

рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛


рдЕрдм рд╣рдореЗрдВ рд╕реЗрд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ /opt/lapps/apps//.lua рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛:

  • /opt/lapps/apps/benchmark/benchmark.lua
  • /opt/lapps/apps/echo/echo.lua

рд╣рдо рдЕрдкрдирд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЕрдм рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдмрд╕ рдЪрд▓рд╛рдПрдВ: rm -f lapps.log; /opt/lapps/bin/lapps.avx2 > log rm -f lapps.log; /opt/lapps/bin/lapps.avx2 > log LAppS рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рд╕реЗ rm -f lapps.log; /opt/lapps/bin/lapps.avx2 > log рдХрд░реЗрдВ рдФрд░ 5 рдорд┐рдирдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдлрд┐рд░ LAppS рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ Ctrl-C рджрдмрд╛рдПрдВ (рдпрд╣ рддреБрд░рдВрдд рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╣ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рджреЗрдЧрд╛), рдпрд╛ рджреЛ рдмрд╛рд░ (рдпрд╣ рд╢рдЯрдбрд╛рдЙрди рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛)ред


рдареАрдХ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реА рд╣реИ:


рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ

рдЗрдХреЛ :: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рдЗрдХреЛ :: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рдЗрдХреЛ :: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рдЗрдХреЛ :: рдСрдирд╕реНрдЯрд╛рд░реНрдЯ
рдЪрд▓ рд░рд╣рд╛ рд╣реИ
1 рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐ 3196ms рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ
рдкреНрд░рддрд┐ 3299ms рдкрд░ 1 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ
рдкреНрд░рддрд┐ 3299ms рдкрд░ 1 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ
3305ms рдкреНрд░рддрд┐ 1 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ
рд╕реЙрдХреЗрдЯреНрд╕ рдХрдиреЗрдХреНрдЯреЗрдб: 100
рд╕реЙрдХреЗрдЯреНрд╕ рдХрдиреЗрдХреНрдЯреЗрдб: 100
рд╕реЙрдХреЗрдЯреНрд╕ рдХрдиреЗрдХреНрдЯреЗрдб: 100
рд╕реЙрдХреЗрдЯреНрд╕ рдХрдиреЗрдХреНрдЯреЗрдб: 100
рдкреНрд░рддрд┐ 1000ms рдкрд░ 134597 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
рдкреНрд░рддрд┐ 1000ms рдкрд░ 139774 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
рдкреНрд░рддрд┐ 1000ms рдкрд░ 138521 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
рдкреНрд░рддрд┐ 1000ms рдкрд░ 139404 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
рдкреНрд░рддрд┐ 1000ms рдкрд░ 140162 рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗ
рдкреНрд░рддрд┐ 1000ms рдкрд░ 139337 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
рдкреНрд░рддрд┐ 1000ms рдкрд░ 140088 рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗ
рдкреНрд░рддрд┐ 1000ms рдкрд░ 139946 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
141204 рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐ 1000ms рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
рдкреНрд░рддрд┐ 1000ms рдкрд░ 137988 рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗ
рдкреНрд░рддрд┐ 1000ms рдкрд░ 141805 рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗ
134733 рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐ 1000ms рдкреНрд░рд╛рдкреНрдд рд╣реБрдП
...


рдЖрдЗрдП рдЗрд╕ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ:


 echo -e ':%s/ms/^V^M/g\n:%g/^$/d\nGdd1G4/Sockets\n4\ndggZZ' | vi $i 

'^ V ^ M' рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдореБрдЦ рд╣рд┐рдЯреНрд╕ рдХрд╛ рджреГрд╢реНрдпрдорд╛рди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ: Ctrl-V Ctrl-V Ctrl-V Ctrl-M, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдмреИрд╢ рд▓рд╛рдЗрди рдХреЛ рдХреЙрдкреА рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛ред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:


  • рд╣рдореЗрдВ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдХреЗ рд╕рд╛рде 'рдПрдордПрд╕' рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдмрд╛рдж рдореЗрдВ рдЧрдгрдирд╛ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрдВрдЧреЗ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ 4 рдорд╛рдирджрдВрдб рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЕрдкрдиреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ рд╕рднреА рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╣рдо рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХреЛ рднреА рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ
  • рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА рдЬрд┐рдирдореЗрдВ рд╕реЙрдХреЗрдЯреНрд╕ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ: 100 (рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЪрд╛рд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдЕрдВрддрд┐рдо 4 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛рдиреЗ рд╕реЗред
  • рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬрдирд╛ред

рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬ рд▓реА рдЧрдИ рд╣реИ рдФрд░ рдЖрдк рдЕрдм рд╢реЗрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВ, рдФрд░ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ:


 # awk -v avg=0 '{rps=($1/$5);avg+=rps;}END{print ((avg*1000)/NR)*4}' log 

рдпрд╣ awk рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрдирд░ рдкреНрд░рддрд┐ ms рдкреНрд░рддрд┐рдзреНрд╡рдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрд╡реАрдЬреА рдЪрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИред рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЗрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдХреБрд▓ рд░рд╛рд╢рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1000 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рд░рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреА рдФрд╕рдд рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред


рдореЗрд░реЗ рдкреАрд╕реА рдкрд░ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ (рдИрдЖрд░рдкреАрдПрд╕) рд╣реИ: релремрей .релрек


рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрддрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:


  • Wsjson рдореЗрдВ tls рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЧрд▓рдд рдореЗрдВ рдмрджрд▓реЗрдВ
  • рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рдмрджрд▓реЗрдВ редрдорд╛рд░реНрдХ рдХреЛ wss: // рд╕реЗ ws: // рдореЗрдВ рджреЗрдЦреЗрдВред
  • rm -f lapps.log; /opt/lapps/bin/lapps.avx2.nostats.notls > log rm -f lapps.log; /opt/lapps/bin/lapps.avx2.nostats.notls > log LAppS рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рднреАрддрд░ рд╕реЗ rm -f lapps.log; /opt/lapps/bin/lapps.avx2.nostats.notls > log , рдФрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред

рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ: рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 721236 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ


SSL рдФрд░ рдмрд┐рдирд╛ SSL рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рд▓рдЧрднрдЧ 22% рд╣реИред рдЖрдЗрдП рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВред


рд╕рд░реНрд╡рд░ A рдкрд░ рд╕рдорд╛рди рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдорд┐рд▓рд╛ рд╣реИ: SSL рдХреЗ рд╕рд╛рде 421905 ERpS рдФрд░ SSL рдХреЗ рдмрд┐рдирд╛ 443145 ERpSред рд╕реНрдкреЗрдХреНрдЯрд░ рдФрд░ рдореЗрд▓реНрдЯрдбрд╛рдЙрди рдХреЗ рд▓рд┐рдП рдкреИрдЪ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд░реНрд╡рд░ B рдкрд░ рдореБрдЭреЗ SSL рдХреЗ рд╕рд╛рде 270996 ERpS рдФрд░ SSL рдХреЗ рдмрд┐рдирд╛ 318522 ERpS рд╕рдХреНрд╖рдо рд╣реИрдВред 385726 рдФрд░ 372126 рдмрд┐рдирд╛ рдПрд╕рдПрд╕рдПрд▓ рдХреЗред рд╕реНрдкреЗрдХреНрдЯрд░ рдФрд░ рдореЗрд▓реНрдЯрдбрд╛рдЙрди рдХреЗ рд▓рд┐рдП рдкреИрдЪ рдХреЛ рднреА рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╣реА рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕реАрдкреАрдпреВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХрдо рд╣реЛрддреА рд╣реИред


рдХреГрдкрдпрд╛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ / dev / urandom рдореЗрдВ рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рд╣реИрдВред рдпрд╣ рддрдм рддрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд▓рдирд╛ рд╢реБрд░реВ рди рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛ рдЪреБрдХреЗ рд╣реИрдВред рддреЛ рдмрд╕ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рд╡реЗ рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИрдВред рдЕрдЧрд░ рдПрд▓рдПрдкреАрдПрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рддреЛ рдмрд╕ рдКрдкрд░ рд╕реЗ рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдпрджрд┐ / dev / urandom рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ LAppS рдЖрдкрдХреЗ CPU рдХреЛ рддрдм рддрдХ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рди рд╣реЛред


рдмрдбрд╝реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЦреБрд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреА рдПрдирдЖрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдорд┐рдЯ рдХреЛ рдордд рднреВрд▓рдирд╛ред рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ


 : sysctl -w fs.file-max=14000000 sysctl -w fs.nr_open=14000000 ulimit -n 14000000 sysctl -w net.ipv4.tcp_mem="100000000 100000000 100000000" sysctl -w net.core.somaxconn=20000 sysctl -w net.ipv4.tcp_max_syn_backlog=20000 sysctl -w net.ipv4.ip_local_port_range="1025 65535" 

рдлрд┐рд░ рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрд░реНрдиреЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЕрд▓рд┐рдореЗрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдирд╛рдо рдмрджрд▓реЗрдВред


рдЗрд╕ рдмрд╛рд░ рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдИ рд▓рд╛рдЦреЛрдВ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реИред


рд╕рд░реНрд╡рд░ рдП рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдЧреВрдВрдЬ рд╕реЗрд╡рд╛ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╕рд░реНрд╡рд░ рдмреА рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдЗрдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред


LuaJIT рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╛рдП рдЧрдП LAppS рдореЗрдВ рдПрдХ рд╕реАрдорд╛ рд╣реИред рдЖрдк рдкреНрд░рддрд┐ LuaJIT VM рдореЗрдВ рдХреЗрд╡рд▓ 2GB RAM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд░реИрдо рдХреА рд╕реАрдорд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдПрд▓рдПрдкреАрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рднреАрддрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд╡рд╛рдПрдВ рдПрдХ рд▓рдмреБрдЖрдЬрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬреБрдбрд╝реЗ рдзрд╛рдЧреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреА рдХреЛрдИ рднреА рд╕реЗрд╡рд╛, рдЬреЛ рд╕рд┐рдВрдЧрд▓ рдПрд▓рдПрдкреАрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рддрд╣рдд рдЪрд▓ рд░рд╣реА рд╣реИ, рдЗрд╕ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рднреА рд╕реЗрд╡рд╛рдПрдВ рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред


рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐ рдПрдХрд▓ рдПрд▓рдПрдкреАрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдЖрдк 64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рдВрджреЗрд╢ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде 2 рддреЛ 464 000 рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрджреЗрд╢ рдХрд╛ рдЖрдХрд╛рд░ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ LAppS рд╕рдВрджреЗрд╢ рдХреЛ LuaJIT рдХреЗ рднреАрддрд░ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред


рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рдмреА рдкрд░ рдПрдХ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрдИ LAppS рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ 2.4 рд▓рд╛рдЦреЛрдВ WebSockets рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╕рд░реНрд╡рд░ A (рдЗрдХреЛ рд╕рд░реНрд╡рд░) LuaJIT рдкрдХреНрд╖ рдкрд░ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП LAppS рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ 12.3 рдорд┐рд▓рд┐рдпрди WebSockets рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред


рдЪрд▓реЛ рд╕рд░реНрд╡рд░ рдП рдФрд░ рдмреА рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред


рд╕рд░реНрд╡рд░ A ws.json
 { "listeners" : 224, "connection_weight": 1.0, "ip" : "0.0.0.0", "port" : 5084, "lapps_config_auto_save" : true , "workers" : { "workers": 40, "max_connections" : 2000000, "auto_fragment" : false, "max_poll_events" : 256, "max_poll_wait_ms" : 10, "max_inbounds_skip" : 50, "input_buffer_size" : 2048 }, "acl" : { "policy" : "allow", "exclude" : [] }, "tls": true, "tls_server_version" : 4, "tls_client_version" : 4, "tls_certificates":{ "ca":"/opt/lapps/conf/ssl/ca.crt", "cert": "/opt/lapps/conf/ssl/example.org.bundle.crt", "key": "/opt/lapps/conf/ssl/example.org.key" } } 

рд╕рд░реНрд╡рд░ A lapps.json
 { "directories": { "app_conf_dir": "etc", "applications": "apps", "deploy": "deploy", "tmp": "tmp", "workdir": "workdir" }, "services": { "echo": { "auto_start": true, "instances": 40, "internal": false, "max_inbound_message_size": 16777216, "protocol": "raw", "request_target": "/echo", "acl" : { "policy" : "allow", "exclude" : [] } } } } 

рд╕рд░реНрд╡рд░ B ws.json
 { "listeners" : 0, "connection_weight": 1.0, "ip" : "0.0.0.0", "port" : 5083, "lapps_config_auto_save" : true , "workers" : { "workers": 0, "max_connections" : 0, "auto_fragment" : false, "max_poll_events" : 2048, "max_poll_wait_ms" : 10, "max_inbounds_skip" : 50, "input_buffer_size" : 2048 }, "acl" : { "policy" : "deny", "exclude" : [] }, "tls": true, "tls_server_version" : 4, "tls_client_version" : 4, "tls_certificates":{ "ca":"/opt/lapps/conf/ssl/ca.crt", "cert": "/opt/lapps/conf/ssl/example.org.bundle.crt", "key": "/opt/lapps/conf/ssl/example.org.key" } } 

рд╕рд░реНрд╡рд░ A рдореЗрдВ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВ:


  • рдмрдВрдз0 - xx203.37
  • рдмрдВрдз 1 - xx23.10

рдПрдХ рддреЗрдЬреА рд╕реЗ рдПрдХ рдФрд░ рдзреАрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред рд╕рд░реНрд╡рд░ рднрд╛рд░реА рд▓реЛрдб рдХреЗ рддрд╣рдд рд╣реЛрдЧрд╛ред


рд╣рдорд╛рд░реЗ /opt/lapps/benchmark/benchmark.lua рд╕реЗ рдПрдХ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВ


benchmark.lua
 benchmark={} benchmark.__index=benchmark benchmark.init=function() end benchmark.messages_counter=0; benchmark.start_time=time.now(); benchmark.max_connections=10000; benchmark.target_port=0; benchmark.target_prefix="wss://IPADDR:"; benchmark.target_postfix="/echo"; benchmark.message="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; benchmark.meter=function() benchmark.messages_counter=benchmark.messages_counter+1; local slice=time.now() - benchmark.start_time; if( slice >= 1000) then print(benchmark.messages_counter.." messages received per "..slice.."ms") benchmark.messages_counter=0; benchmark.start_time=time.now(); end end benchmark.run=function() local n=nap:new(); local counter=1; n:sleep(1); local array={}; local start=time.now(); while(#array < benchmark.max_connections) and (not must_stop()) do benchmark.target_port=math.random(5084,5307); local sock, err_msg=cws:new(benchmark.target_prefix..benchmark.target_port..benchmark.target_postfix, { onopen=function(handler) local result, errstr=cws:send(handler,benchmark.message,2); if(not result) then print("Error on websocket send at handler "..handler..": "..errstr); end end, onmessage=function(handler,message,opcode) benchmark.meter(); cws:send(handler,message,opcode); end, onerror=function(handler, message) print("Client WebSocket connection is failed for socketfd "..handler..". Error: "..message); end, onclose=function(handler) print("Connection is closed for socketfd "..handler); end }); if(sock ~= nil) then table.insert(array,sock); else print(err_msg); err_msg=nil; collectgarbage("collect"); -- force garbage collection on connection failure. end -- poll events once per 10 outgoing connections -- this will improve the connection establishment speed if counter == 10 then cws:eventLoop(); counter=1 else counter = counter + 1; end end print("Sockets connected: "..#array); benchmark.start_time=time.now(); while not must_stop() do cws:eventLoop(); end for i=1,#array do array[i]:close(); cws:eventLoop(); end end return benchmark; 

рдЖрдЗрдП рд╕рд░реНрд╡рд░ A IP рдкрддреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ IP1 рдФрд░ IP2 рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░:


 for i in 1 2 do mkdir -p /opt/lapps/apps/benchmark${i} sed -e "s/IPADDR/$(cat IP1)/g" /opt/lapps/apps/benchmark/benchmark.lua > /opt/lapps/apps/benchmark${i}/benchmark${i}.lua done 

рдЕрдм рд╣рдо рд╕рд░реНрд╡рд░ рдмреА рдкрд░ / рдЧреЛрдж /lapps/etc/conf/lapps.json рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЗрди рджреЛ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


рд╕рд░реНрд╡рд░ рдмреА lapps.json
 { "directories": { "app_conf_dir": "etc", "applications": "apps", "deploy": "deploy", "tmp": "tmp", "workdir": "workdir" }, "services": { "benchmark1": { "auto_start": true, "instances" : 112, "internal": true, "preload": [ "nap", "cws", "time" ] }, "benchmark2": { "auto_start": true, "instances" : 112, "internal": true, "preload": [ "nap", "cws", "time" ] } } } 

рдХреНрдпрд╛ рд╣рдо рддреИрдпрд╛рд░ рд╣реИрдВ? рдирд╣реАрдВ рд╣рдо рдирд╣реАрдВ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рджреЛ рдкрддреЛрдВ рдкрд░ 2 240 000 рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕реЙрдХреЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЕрдзрд┐рдХ рдкреЛрд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рдЖрдИрдкреА рд╕реЗ рдЕрдзрд┐рдХ 64k рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ: рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реА (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рддреЛ 64k)ред


рд╕рд░реНрд╡рд░ рдП рдкрд░ рдлрд╝рд╛рдЗрд▓ LAppS рдореЗрдВ рд╢рд╛рдорд┐рд▓ / / wsServer.h рдПрдХ рдлрд╝рдВрдХреНрд╢рди void startListeners () рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣рдо рд▓рд╛рдЗрди 126 рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ


 LAppSConfig::getInstance()->getWSConfig()["port"], 

рдЗрд╕рдХреЗ рд╕рд╛рде:


 static_cast<int>(LAppSConfig::getInstance()->getWSConfig()["port"])+i, 

LAppS рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:


 make CONF=Release.AVX2 install 

2 240 000 рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред


рд╕рд░реНрд╡рд░ рдмреА рдкрд░ LAppS рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ, рдлрд┐рд░ рд╕рд░реНрд╡рд░ B рдкрд░ LAppS рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ:


 /opt/lapps/bin/lapps.avx2 > log 

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, NB:


 if you want to run several LAppS instances, then create separate directory for each instnace (like run1,run2, etc) and run each instance from within these directories. This is required for lapps.log file and of course for resulting standard output, for not to be overlapped/overwritten by concurrent LAppS instances. 

рд╕рднреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рддрдХ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдкреНрд░рдЧрддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред


рд╕реНрдерд╛рдкрд┐рдд рдХрдиреЗрдХреНрд╢рди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╕реНрдЯреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ 150k рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рддрд░рд╣ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдЪрд▓рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ A рдкрд░ lapps.log рдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк LAppS рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдереЗред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рди-рд▓рд╛рдЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ IOWorkers рдХреЗ рдмреАрдЪ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:


 date;awk '/ will be added to connection pool of worker/{a[$22]++}END{for(i in a){ print i, a[i]; sum+=a[i]} print sum}' lapps.log | sort -n;date 

рдЗрди рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдХрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ:


 375874 Sun Jul 21 20:33:07 +06 2019 650874 Sun Jul 21 20:34:42 +06 2019 2894 connections per second 1001874 Sun Jul 21 20:36:45 +06 2019 2974 connections per second 1182874 Sun Jul 21 20:37:50 +06 2019 2784 connections per second 1843874 Sun Jul 21 20:41:44 +06 2019 2824 connections per second 2207874 Sun Jul 21 20:45:43 +06 2019 3058 connections per second 

рд╕рд░реНрд╡рд░ B рдкрд░ рд╣рдо рдЙрдирдХреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдорд╛рдирджрдВрдб рдХреА рд░рд╛рд╢рд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 # grep Sockets log | wc -l 224 

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╕рдВрдЦреНрдпрд╛ 224 рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ, рд╢реАрд░реНрд╖ рдкрд░ рд╕реАрдкреАрдпреВ рдФрд░ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдмрд╛рдИрдВ рдУрд░ рд╕рд░реНрд╡рд░ рдмреА рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рд░реНрд╡рд░ рдП):


рдЫрд╡рд┐


рдпрд╛ рдЗрд╕ рддрд░рд╣ (рдмрд╛рдИрдВ рдУрд░ рд╕рд░реНрд╡рд░ рдмреА рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рд░реНрд╡рд░ рдП):



рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдмреА рд╣реИ, рдЬрд╣рд╛рдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрд╡рд╛рдПрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВ, рднрд╛рд░реА рднрд╛рд░ рдХреЗ рдЕрдзреАрди рд╣реИред рд╕рд░реНрд╡рд░ рдП рднрд╛рд░реА рд▓реЛрдб рдХреЗ рддрд╣рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред рдЬрдм рд╕рд░реНрд╡рд░ рдмреА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдмрд╛рд░ рдпрд╣ рдзреЛрдЦрд╛ рджреЗрддрд╛ рд╣реИред рдЯреАрдПрд▓рдПрд╕ рдкрд░ рдЯреНрд░реИрдлрд┐рдХ рд╕рд╛рдЗрдлрд░рд┐рдВрдЧ рдмрд╣реБрдд рд╕реАрдкреАрдпреВ рдЗрдВрдЯреЗрдВрд╕рд┐рд╡ рд╣реИред


рдЖрдЗрдП рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ (рдХрдИ рдмрд╛рд░ Ctrl-C рджрдмрд╛рдПрдВ) рдФрд░ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд▓реЙрдЧ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдмрджрд▓реА рд╣реБрдИ рд░рд╛рд╢рд┐ (224) рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ:


 echo -e ':%s/ms/^V^M/g\n:%g/^$/d\nGdd1G224/Sockets\n224\ndggZZ' | vi $i awk -v avg=0 '{rps=($1/$5);avg+=rps;}END{print ((avg*1000)/NR)*224}' log 

рдЖрдк рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рд╕реЗ рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдВрддрд┐рдо рд▓рд╛рдЗрдиреЗрдВ рднреА рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рдЪрд▓ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛, рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред


рдЕрдиреНрдп рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо (4.9 рдорд┐рд▓рд┐рдпрди рдФрд░ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ)



рдкрд░реАрдХреНрд╖рдг # 4 рд▓реЛрдб


рдкрд░реАрдХреНрд╖рдг # 5 рд▓реЛрдб


# 5 рд╕рдорд╛рди CPU рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрддреБрд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг


рдкрд░реАрдХреНрд╖рдг # 6


рдкрд░реАрдХреНрд╖рдг # 8


рдкрд░реАрдХреНрд╖рдг # 12


рдкрд░реАрдХреНрд╖рдг # 13


рд╕рдорд╕реНрдпрд╛рдПрдВред


рд▓рд╛рд▓ рдХреЗ рд╕рд╛рде рдКрдкрд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рддред


рддрдм рд╕рд░реНрд╡рд░ рдмреА рдкрд░ 224 рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдЪрд▓рд╛рдирд╛ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдмрд┐рдд рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рд╕рд░реНрд╡рд░ рд╕реАрдкреАрдпреВ рд╕рдордп рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ / рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ред рдкрд╣рд▓реЗ 224 рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЗ рд▓рд┐рдпрд╛ рдФрд░ рдмрд╛рдХреА рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдкрд┐рдЫрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореВрд▓рд╛рдВрдХ -20 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ (448 рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕, 2 рдПрд▓рдПрдкреАрдПрд╕ рдЙрджрд╛рд╣рд░рдг):


448 рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЙрджрд╛рд╣рд░рдг


рд╕рд░реНрд╡рд░ рдмреА (рдмрд╛рдИрдВ рдУрд░) рдмрд╣реБрдд рднрд╛рд░реА рднрд╛рд░ рдХреЗ рдЕрдзреАрди рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдП рдореЗрдВ рдЕрднреА рднреА рдореБрдлреНрдд рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВред


рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ LAppS рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмреЗрдВрдЪрдорд╛рд░реНрдХ .max_connections рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░ рджрд┐рдпрд╛ред


рдЕрднреА рднреА 12.3 рдорд┐рд▓рд┐рдпрди рд╡реЗрдмрд╕реНрдХреЗрдЯреНрд╕ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣реЗ рдЪрд╛рд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдмрд┐рдирд╛ 5 рдПрд▓рдПрдкреАрдПрд╕ рдЙрджрд╛рд╣рд░рдг (рдкрд░реАрдХреНрд╖рдг 5 рдФрд░ 6) рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдФрд░ CFST рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдФрд░ рдорд╛рд░рдиреЗ -STOP / -Cont рдпрд╛ / рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 while [ 1 ]; do kill -STOP <4 fast-processes pids> sleep 10 kill -CONT <4 fast-processes pids> sleep 5 done 

2019 рдЖрд░рдПрдЪрдИрдПрд▓ 7.6 рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВрдиреЗ 2009 рдХреЗ рдмрд╛рдж рдкрд╣рд▓реА рдмрд╛рд░ рд░реЗрдирд┐рд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдХреНрдпрд╛ рд╣реИ, - рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░ рд▓рдЧрднрдЧ рдЕрд╕рдлрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред


рдореБрдЭреЗ рдПрдирдЖрдИрд╕реА рдХреЗ рддрд┐рддрд░-рдмрд┐рддрд░ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереАред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред


рдореБрдЭреЗ рднрд╛рд░реА рднрд╛рд░ рдФрд░ рдПрдирдЖрдИрд╕реА рдЪрд╛рд▓рдХ рдмрдЧ рдХреЗ рддрд╣рдд рдЖрдВрд╢рд┐рдХ рд▓рд┐рдВрдХ рд╡реНрдпрд╡рдзрд╛рди рдереЗ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред


рдХрд╣рд╛рдиреА рдХрд╛ рдЕрдВрдд


рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдореЗрд░реЗ рдЕрдиреБрдорд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЪрд┐рдХрдирд╛ рдЪрд▓рд╛ рдЧрдпрд╛ред


рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рдП рдкрд░ рдПрд▓рдПрдкреАрдПрд╕ рдХреЛ рдЕрдкрдиреА рдкреВрд░реНрдг рдХреНрд╖рдорддрд╛ (рдПрд╕рдПрд╕рдПрд▓ рдХреЗ рдмрд┐рдирд╛) рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЯреАрдПрд▓рдПрд╕ 1.3 рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рд░реНрд╡рд░ рдП рдкрд░ рдПрд▓рдПрдкреАрдПрд╕ рд▓рдЧрднрдЧ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред


рдореБрдЭреЗ рдЕрдм рднреА рдпрдХреАрди рд╣реИ рдХрд┐ LAppS рд╡рд╣рд╛рдБ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ WebSockets рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ Cws WebSockets рдХреНрд▓рд╛рдЗрдВрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреЛ рдЙрдЪреНрдЪ рднрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред


рд╕рд▓рд╛рд╣ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рд╡реЗрдмрд╕реНрдХреЙрдлрд╝реНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА-рдкрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрднреА рднреА рдирдВрдЧреЗрдХреНрд╕ рдпрд╛ рдЕрдкрд╛рдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╛ рдЖрдк рдкрд░рд┐рдорд╛рдг рдХреЗ рдЖрджреЗрд╢ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗред рд╡реЗ WebSockets рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдиреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi460847/


All Articles