ประสิทธิภาพของ Postfix


11

ใช้ postfix บน ubuntu ส่งจดหมายจำนวนมาก (ประมาณ 1 ล้านข้อความ) ต่อวัน โหลดสูงมาก แต่ไม่มากในแง่ของ cpu และโหลดหน่วยความจำ ทุกคนในสถานการณ์ที่คุ้นเคยและรู้วิธีลบคอขวดหรือไม่

จดหมายทั้งหมดในเซิร์ฟเวอร์นี้อยู่นอก

ฉันจะต้องสมมติว่าคอขวดเป็นดิสก์

เพียงแค่อัปเดตนี่คือสิ่งที่ iostat ดูเหมือนว่า:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.12   99.88    0.00    0.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    12.38    0.00    2.48     0.00   118.81    48.00     0.00    0.00   0.00   0.00
sdb               1.49    22.28   72.28   42.57   629.70  1041.58    14.55   135.56  834.31   8.71 100.00

ตัวเลขเหล่านี้สอดคล้องกับประสิทธิภาพที่คุณคาดหวังจากดิสก์เดียวหรือไม่

sdb ทุ่มเทให้กับ postfix

ฉันคิดว่ามันเป็นคิวสับเปลี่ยนจากขาเข้า -> ที่ใช้งาน -> รอการตัดบัญชี

รายละเอียดเพิ่มเติมจากคำถาม:

เซิร์ฟเวอร์: Quad core Xeon (R) CPU E5405 @ 2.00GH พร้อม RAM 4 GB

โหลดเฉลี่ย: 464.88, 489.11, 483.91, 4 แกน แต่การใช้งานหน่วยความจำและ cpu น้อยที่สุด

อินสแตนซ์ Postfix ระหว่าง 16 - 32


ด้วยการโหลดมากกว่า 400 รายการฉันคิดว่าระบบทำอะไรถ้าคุณส่งข้อความ 1 ล้านข้อความต่อวันผ่าน 1 ระบบฉันขอแนะนำให้คุณปรับปรุงดิสก์ของคุณ IO (Ramdisk, Raid) และอาจย้ายไปที่ตัวเลือกเพิ่มเติมแบบคลัสเตอร์ ฉันแน่ใจว่า 400 โหลดเมลที่ย้ายของเซิร์ฟเวอร์ของคุณค่อนข้างช้า
grufftech

@Brian G: คุณสามารถตั้งค่าความคิดเห็น แต่ฉันไม่คิดว่าคุณสามารถลบได้ แต่ฉันเห็นด้วยกับเขา
womble

คำตอบ:


9

นี่อาจฟังดูบ้าไปหน่อย แต่คุณควร:

  1. ปิดการบันทึกสู่ขั้นต่ำสุดที่คุณต้องการ ทำให้ syslog log mail.err หรือสูงกว่าเท่านั้น
  2. เพิ่ม RAM เพิ่มเติม ใช่ Postfix ไม่ต้องการ แต่ RAM เพิ่มเติมหมายถึงแคชหน้าพิเศษสำหรับเคอร์เนล
  3. คุณไม่ได้พูดถึงว่าระบบไฟล์ใดอยู่บน / dev / sdb (ซึ่งมีความสำคัญเช่นกัน) แต่เปลี่ยนไปใช้อย่างแน่นอนnoatimeซึ่งควรลดการโหลดลงอย่างน้อย
  4. ดูว่า / var / spool / postfix ของคุณใหญ่แค่ไหน ถ้ามันอยู่ภายใต้กิ๊กสองสามพิจารณาย้ายมันไปยัง ramdisk

ไม่สามารถพูดได้ดีกว่านี้ ฉันสังเกตเห็น 3. เช่นกัน sda และ sdb ที่ไม่มีพาร์ติชันอาจทำให้การทำงานช้าลงหรืออย่างน้อยก็ไม่มีประสิทธิภาพในการใช้ดิสก์ในระบบ
grufftech

Nevermind - ฉันปัญญาอ่อนดูเหมือนว่า iostat -x แทนที่จะเป็น iostat เท่านั้น ความผิดพลาดของฉัน!
grufftech

ไม่มีเหตุผลใดที่จะลองและลดจำนวนการบันทึกตราบใดที่คุณมีการบันทึก syslog แบบอะซิงโครนัสและ (ควร) มีการบันทึกและสปูลบนแกนหมุนที่แตกต่างกัน ตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำการบันทึก verbose ใด ๆ สำหรับการทำงานปกติ
ร็อบ Chanter

4

ฉันไม่เห็นด้วยกับสิ่งที่แนะนำให้ใช้ดิสก์ RAM สำหรับ "/ var / spool / postfix" ซึ่งหมายความว่าคิวจดหมายทั้งหมดของคุณจะถูกเก็บไว้ใน RAM หากเซิร์ฟเวอร์ของคุณขัดข้องหรือสูญเสียพลังงานข้อความในคิวจะหายไปตลอดกาล สิ่งนี้แย่มากจากมุมมองของลูกค้า / ผู้ใช้เนื่องจากข้อความได้รับการยอมรับสำหรับการจัดส่งเรียบร้อยแล้ว ยิ่งไปกว่านั้นเซิร์ฟเวอร์ของคุณจะไม่ส่งประกาศที่ระบุว่าอีเมลถูกตีกลับหรือไม่สามารถส่งมอบได้เนื่องจากคิวจะว่างเปล่าเมื่อเซิร์ฟเวอร์กลับมา

แต่ฉันจะเพิ่มดิสก์ที่เร็วที่สุดเท่าที่จะทำได้ ฉันไม่สามารถประเมินได้ว่าคุณต้องการข้อมูลจำนวนเท่าใด จากเอาต์พุต "iostat" ด้านบนดูเหมือนว่าคุณกำลังทำ ~ 120 IOPS ถึง 'sdb' (ผลรวมของ r / s และ w / s) คุณสามารถประมาณได้อย่างสมเหตุสมผลว่าดิสก์ RPM SCSI หรือ FC 15k หนึ่งแผ่นจะรองรับ 150 IOPS ฉันจะเริ่มต้นด้วยดิสก์ 15 15 RPM SCSI และคอนโทรลเลอร์ RAID ที่เหมาะสม ตั้งค่าเป็น RAID-10 ใน 4 ไดรฟ์ด้วย 1 hot spare ฉันไม่แน่ใจว่าสิ่งนี้จะแก้ปัญหาของคุณได้อย่างสมบูรณ์ แต่แน่นอนจะไม่ทำให้แย่ลง


2

เรียกใช้ postfix ภายใต้ profiler (gprof?) บางตัวหรือดูในบันทึก Postfix บันทึกข้อมูลเวลาจำนวนมากที่อาจบอกคุณได้ว่าการค้างไว้เป็นอย่างไร สถานที่ที่ต้องมองหาคือ:

  1. ประสิทธิภาพของดิสก์ อาจถึงเวลาสำหรับ RAID-10 สำหรับคิวของคุณ
  2. เครือข่าย IO ใด ๆ ในข้อความ บัญชีดำ DNS SAV?
  3. ไมล์และตัวกรองอื่น ๆ ที่คุณติดตั้งไว้
  4. การพิสูจน์ตัวตนและการค้นหา UID ที่กระทำผ่านเครือข่ายหรือกระบวนการ (ldap, sql)
  5. ไม่ใช้พร็อกซี: สำหรับแผนที่ช้า (เช่นด้านบน)

ใช้สิ่งที่ต้องการiostat -x -v 3ตรวจสอบการใช้งานดิสก์
moshen

ด้วย iostat -x ประสิทธิภาพของดิสก์ที่แน่นอน lol, 100% Util บนดิสก์
grufftech

ออกไปซื้อไดรฟ์ SAS ขนาด 15k จำนวน 4 ตัวหากเครื่องของคุณจะใช้งานหรือจะใช้ไดรฟ์ Velociraptor SATA 4 ตัวหากไม่มี SAS RAID-10 พวกเขาเมานต์เป็นคิว postfix หากไม่เป็นเช่นนั้นให้ดูที่ Intel SSDs แต่โลกของคุณจะต้องเจ็บปวดอย่างมาก
บิลไวส์

2

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

สถานการณ์ของคุณดูเหมือนเซิร์ฟเวอร์ I / O-bound อย่างหนัก สิ่งนี้คาดว่าจะเกิดขึ้นกับ MTA ซึ่งจำเป็นต้องมีการเขียนขนาดเล็กจำนวนมากเพื่อรับประกันว่าจะไม่สูญเสียเมล

ใช้เวลาในการปรับแต่ง I / O ได้ทั้งบนและ/var/spool/postfix /var/logแนวปฏิบัติที่ดีที่สุดสำหรับเซิร์ฟเวอร์ postfix ที่ไม่ว่างคือการแยกทั้งสองระหว่างแกนหมุนที่แตกต่างกันและเพื่อให้แน่ใจว่ามีการเปิดใช้งานการบันทึกแบบอะซิงโครนัส นำหน้าชื่อไฟล์บันทึกสำหรับบันทึกจดหมายของคุณด้วยเส้นประบน Linux

mail.info                              -/var/log/mail.log

หรือคล้ายกัน

หากคุณใช้ amavisd-new ตรวจสอบให้แน่ใจว่าพื้นที่ทำงานอยู่ในระบบไฟล์ tmpfs /tmp/vscan/เรามักจะใส่ไว้ใน สิ่งนี้มีความปลอดภัยเนื่องจาก amavisd-new ไม่ส่งคืนการตอบสนองเมื่อสิ้นสุดข้อมูลจนกว่าการสตรีมแบบดาวน์สตรีม (ตัวกรองหลัง) ยอมรับข้อความ

บางคนแนะนำnoatimeตัวเลือกการเมาท์สำหรับสปูล postfix สิ่งนี้อาจไม่ฉลาดเนื่องจากวิธีการ postfix ขึ้นอยู่กับความหมายของระบบไฟล์ ดูตัวอย่างhttp://archives.neohapsis.com/archives/postfix/2006-01/1916.html


1

ดูเหมือนว่าระบบย่อยดิสก์ของคุณอย่างน้อยก็ควรดูเป็นส่วนหนึ่งของปัญหา เนื่องจากวิธีการสับเปลี่ยนไฟล์ postfix รอบ / var ฉันขอแนะนำ googling สำหรับ "tweak ext3 filesystem" (อย่างน้อยการตั้งค่า noatime และ writeback) เพื่อดูว่าคุณไม่สามารถเพิ่มประสิทธิภาพในระดับระบบไฟล์ได้หรือไม่

ฉันมีเซิร์ฟเวอร์สองกลุ่มที่ทำหน้าที่ DNS สองเท่าและ SMTP ขาออกสำหรับอีเมลที่กำหนดลูกค้าและเรียกใช้ข้อความ 250k ทุกวัน (2k-10k / ชั่วโมง) โดยไม่มีที่ไหนใกล้กับ I / O bindup


0

ดูเหมือนคอขวดที่เก็บประสิทธิภาพสำหรับฉัน

iowait 99.88 จะบอกคุณว่าระบบของคุณใช้เวลามากในการรอการจัดเก็บข้อมูลของคุณ

ฉันเห็นด้วยกับบิลไวส์ คุณควรตรวจสอบการตั้งค่า raid10 สำหรับคิว


0

หรือเริ่มต้นด้วย

vmstat 1

"iostat 1" ที่แนะนำโดย moshen ก็ดีเช่นกัน

จากสถิติของคุณชัดเจนว่าระบบย่อยของดิสก์ที่เร็วกว่าจะดีกว่า raid-10 บนดิสก์ 6-8 รอบต่อนาที 15k อาจมีแคชบางคู่ของหน่วยความจำในตัว

เมานต์สปูลไดเรกทอรีของคุณด้วยตัวเลือกเวลากลางคืน, nodiratime พิจารณาปรับหรือเปลี่ยนระบบไฟล์ของคุณเพื่อจัดการกับไฟล์เล็ก ๆ [i ถือว่า]


0

ไบรอัน

คุณต้องใช้ดิสก์ที่เร็วกว่าหรือต้องการย้ายไปที่โซลูชันการโจมตี เซิร์ฟเวอร์ประเภทนี้คืออะไร?

เจมส์


Quad core Xeon (R) CPU E5405 @ 2.00GHz RAM 4 GB
Brian G

0

หากคุณใช้งาน Amavis เพื่อกรองสแปม + ไวรัสคุณควรเพิ่มจำนวนกระบวนการ Amavis พร้อมกัน ตามการตั้งค่าของคุณคุณอาจต้องเพิ่มทั้งจำนวนของกระบวนการ smtp-amavis จาก postfix master.cf และการตั้งค่าที่เกี่ยวข้องใน amavis.conf


ขอบคุณ แต่ไม่ได้ทำงาน amavis
Brian G

0

มีกี่แกนในกล่องและโหลดจริงคืออะไร? อัตราจริงที่คุณได้รับข้อความถูกส่งออกมาคืออะไร?

ความคิดแรกของฉันคือดิสก์ดังนั้นให้ตรวจสอบดู

อย่างไรก็ตามการใช้เครือข่ายอาจเป็นสาเหตุเนื่องจากอาจมีการโหลดอินเตอร์รัปต์สูง (การ์ดไม่ดี?) ดังนั้นให้ตรวจสอบสิ่งเหล่านั้น ฉันพบว่าแม้สำหรับเซิร์ฟเวอร์อีเมลที่มีขนาดเล็ก แต่การมีเซิร์ฟเวอร์ DNS ที่แคชเร็ว (ฉันเป็นบางส่วนของ "ไม่ถูกผูกมัด") ในกล่องเดียวกันจะช่วยลดเวลาในการตอบสนองและโหลดเครือข่าย


ภาระเฉลี่ย: 464.88, 489.11, 483.91, 4 แกน แต่การใช้งานหน่วยความจำและ cpu น้อยที่สุด
Brian G

อุ๊ยตาย คุณใช้โปรแกรม pro postfix กี่ครั้งในเวลาใดเวลาหนึ่ง? บางทีการปรับจำนวนกระบวนการที่ทำงานในคราวเดียวจะช่วยลดความยุ่งยากในการแย่งชิงดิสก์ i / o เล็กน้อย น้อยกว่า procs แต่แต่ละคนสามารถไปได้เร็วขึ้นเล็กน้อย หรือกลไกการควบคุมปริมาณ Postfix อื่น ๆ เช่น จำกัด การตัดภาระให้บางสิ่งบางอย่างที่สมเหตุสมผล
Geoff Fritz

อินสแตนซ์ 16-32 postfix
Brian G

3
4xx โหลดเฉลี่ยไม่ได้เป็น "สูงมาก" มัน "เซิร์ฟเวอร์ของฉันจะทยอย" :)
บิลไวส์

0

เมื่อคุณอ่าน 630 ครั้งและเขียน 1,042 ครั้งต่อวินาทีฉันขอแนะนำให้คุณใช้หน่วยความจำในระบบ (เพื่อจัดการระบบปฏิบัติการและไดรฟ์ RAM) ให้ดีขึ้นจากนั้นสร้างโฟลเดอร์ postfix ของคุณเป็น ramdisk

นอกจากนี้ยังขอแนะนำให้วางบันทึกเมลของคุณไว้ในพาร์ติชันของตนเองหากไม่ใช่ดิสก์ทั้งหมด


0

นี่ไม่ใช่ปัญหา IO แต่เป็นปัญหาการกำหนดค่า postfix คุณกำลังขอให้ทำมากเกินไปในครั้งเดียวและสร้างคอขวดด้วยตัวคุณเอง ตรวจสอบreadme การปรับแต่งประสิทธิภาพ postfixและ / หรือโพสต์ main.cf ของคุณเพื่อให้เราสามารถช่วยได้


0

ดูเหมือนว่าคุณมีดิสก์ซึ่งหลบ เซิร์ฟเวอร์ของคุณทำการร้องขอการอ่าน 72 ครั้ง / วินาที & 42 การเขียน / วินาที HDD เดสก์ท็อป seagate 7200 RPM ของฉันสามารถทำคำขออ่าน / เขียนแบบสุ่มได้ 100+ ครั้งต่อวินาทีและยังคงสามารถรับมือกับมันได้

ลองติดตั้งแกนม้วนเก็บบน sda และดูว่าโหลดดีขึ้นหรือไม่

แต่ก่อนที่คุณจะสาดเงินบนดิสก์ให้ทำดังนี้:

  1. เรียกใช้ qshape แอ็คทีฟ qshape เลื่อนออกไปและ qshape ขาเข้าและแจ้งให้เราทราบยอดรวมของแต่ละคำสั่ง

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

  2. ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์อีเมลของคุณไม่ได้อยู่ในบัญชีดำ ( http://www.mxtoolbox.com/blacklists.aspx )

  3. ตรวจสอบเวลาตอบสนอง DNS & เรียกใช้แคช DNS ในเครื่อง

    เมลเซิร์ฟเวอร์ใช้ DNS ค่อนข้างหนัก อย่า dig somedomain.com mx เรียกใช้ผ่านโฮสต์ที่แตกต่างกันไม่กี่ โดยทั่วไปเวลาตอบสนองควรน้อยกว่า 100 - 400ms หากคุณได้รับการตอบสนองที่สูงขึ้น DNS ของคุณอาจทำงานได้ไม่ดี ลอง DNS อื่น (คุณสามารถลองใช้ google 8.8.8.8 หรือ OpenDNS: 208.67.222.222)

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

  5. คุณสามารถบอกเราได้ว่าคอนโซลตอบสนองหรือไม่ (เช่นเมื่อคุณพิมพ์คำสั่งบางคำสั่งระบบจะตอบสนองเร็วแค่ไหน)

    โดยทั่วไปปัญหาเครือข่าย (เช่น DNS) จะทำให้โหลดเพิ่มขึ้น แต่ระบบยังคงตอบสนองได้

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