TCP: หน่วยความจำไม่เพียงพอ - Nginx


-1

ฉันใช้งานเว็บไซต์ที่มีปริมาณการใช้งานสูงบนเซิร์ฟเวอร์ nginx ไม่กี่วันที่ผ่านมาฉันมีปัญหากับการล็อค VPS ของฉัน (ไม่สามารถ SSH และ nginx ดูเหมือนจะหยุดทำงาน) เมื่อฉันดูในบันทึกฉันสามารถดูสิ่งต่อไปนี้:

TCP: out of memory

เมื่อฉันตรวจสอบสถานะของฉันฉันจะเห็นว่ามีหน่วยความจำมากกว่า 50% ฉันคิดว่าฉันต้องปรับจำนวนหน่วยความจำ TCP ที่ได้รับอนุญาตให้ใช้ เมื่อ googling ฉันพบเคล็ดลับในการปรับแต่ง แต่ไม่สามารถแก้ไขได้

ฉันเปลี่ยนค่าใน / proc / sys / net / ipv4 / tcp_mem เป็นดังต่อไปนี้

16392   21856   32784

นอกจากนี้ /etc/sysctl.conf ยังถูกปรับเป็น:

#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additonal system variables
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
net.core.somaxconn = 1000
vm.swappiness = 20

net.ipv4.tcp_rmem= 193374  257832  386748
net.ipv4.tcp_wmem= 193374  257832  386748

net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 1

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

ขอบคุณ!


คุณสามารถเริ่มมองจาก "man 7 tcp"
c4f4t0r

ระบบของคุณมี RAM เท่าใด คุณสามารถสำรองได้มากแค่ไหน คุณคาดว่าจะมีการเชื่อมต่อกี่ครั้งพร้อมกัน?
David Schwartz

คำตอบ:


0

tcp_memค่าดูเหมือนว่าต่ำมาก

ด้วยระบบปฏิบัติการที่ใช้ขนาดหน้าหน่วยความจำ 4kb หมายความว่าสแต็ก tcp ได้รับอนุญาตให้ใช้134 MBRAM ได้สูงสุดจนกว่าแพ็คเก็ตจะลดลงเพื่อลดการใช้หน่วยความจำ


เปลี่ยนค่าเหล่านี้เป็นรูท @ bart: / var / log # cat / proc / sys / net / ipv4 / tcp_mem 47706 63610 95412 แต่ก็ยังล้มเหลวทุก 5 วัน
W. Loockx

ดูเหมือนว่าจะยังต่ำอยู่ net.ipv4.tcp_mem = 380964 507955 761928เครื่องของฉันมีค่าเริ่มต้นและจะได้มีการกำหนดตัวเองไป การตั้งค่าของคุณสูงสุด TCP out ที่ 372MB หรือมากกว่านั้น
David Schwartz

0

เนื่องจากปัญหาของคุณไม่ได้เกิดขึ้นทันที แต่ปรากฏขึ้นในไม่กี่วันหลังจากรีสตาร์ทดูเหมือนว่ากระบวนการบางอย่างมีหน่วยความจำรั่ว คุณมีการตรวจสอบหน่วยความจำฟรีหรือไม่? ถ้าใช่คุณเห็นแนวโน้มการเติบโตของการใช้หน่วยความจำหรือไม่? ถ้าไม่คุณควรกำหนดค่า ตรวจสอบกับ 'ด้านบน' ซึ่งกระบวนการผู้ใช้จะกินหน่วยความจำมากกว่า ถัดไป TCP ใช้หน่วยความจำเคอร์เนลดังนั้นตรวจสอบการใช้หน่วยความจำเคอร์เนลด้วย 'slabtop' เรียกใช้และบันทึกผลลัพธ์เป็นระยะ ๆ โดยเริ่มต้นจากการรีสตาร์ทและตรวจสอบว่าคุณมีผู้ชนะรางวัลหน่วยความจำเคอร์เนลหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.