postfix membutuhkan 60-90ms untuk mengantri email - normal?

8

Kami melihat beberapa (mungkin?) Penundaan aneh ketika mengirimkan email individual ke server Postfix lokal kami.

Untuk membantu mendiagnosis masalah ini, saya menulis sebuah program pengujian kecil yang mengirim 5 email:

get smtp 1ms   (  1 ms)
email 0 677ms  (676 ms)
email 1 802ms  (125 ms)
email 2 890ms  ( 88 ms)
email 3 973ms  ( 83 ms)
email 4 1088ms (115 ms)

Diskon handshaking di email pertama, itu sekitar 90 ms per email. Pengaturan waktu ini juga telah dikuatkan dengan aplikasi pengujian lain yang ditulis oleh orang lain menggunakan codepath yang berbeda, sehingga tampaknya terkait dengan server.

Saya mengaktifkan pencatatan yang terperinci dan saya dapat melihat bahwa penundaan itu antara akhir pesan \r\n\r\ndan penerimaan:

[16:31:29.95] [SEND] \r\n.\r\n
[16:31:30.05] [RECV] 250 2.0.0 Ok: queued as B128E1E063\r\n

[16:31:30.08] [SEND] \r\n.\r\n
[16:31:30.17] [RECV] 250 2.0.0 Ok: queued as 4A7DE1E06E\r\n

[16:31:30.19] [SEND] \r\n.\r\n
[16:31:30.27] [RECV] 250 2.0.0 Ok: queued as 68ACC1E072\r\n

[16:31:30.28] [SEND] \r\n.\r\n
[16:31:30.34] [RECV] 250 2.0.0 Ok: queued as 7EFFE1E079\r\n

[16:31:30.39] [SEND] \r\n.\r\n
[16:31:30.45] [RECV] 250 2.0.0 Ok: queued as 9793C1E07A\r\n

Interval waktu menceritakan kisah tersebut (diskon jabat tangan yang diperlukan untuk email awal) - setiap email menunggu sekitar 60-90 milidetik agar postfix mengantre!

Ini sepertinya .. berlebihan .. bagi saya. Apakah "normal" untuk postfix mengambil 60-90 ms untuk setiap email yang Anda kirim? Atau apakah saya hanya memiliki harapan yang tidak masuk akal? Saya berharap server postfix lokal mengantri email sekitar 20 ms, top!

Jeff Atwood
sumber
3
Apakah Anda mengaktifkan penyaringan, seperti memeriksa SPF, mencari DNS terbalik, atau Ident? Menggunakan SMTP atau MSP?
Chris S

Jawaban:

12

Kedengarannya normal. Jika Anda menjalankan beberapa koneksi secara paralel dengan mengirimkan email, apakah Anda masih mendapatkan 90ms per email? Ini akan membuat Anda dengan mudah menaikkan tingkat Anda sehingga Anda bisa mengirim surat.

Saya tahu bahwa MTA lain (sendmail) akan fsync () untuk memastikan bahwa email yang diterima dikomit ke disk sebelum mengirim kembali respons 250, sehingga email tidak dibatalkan jika sistem macet setelah menerima email. postfix mungkin juga melakukannya.

Anda dapat menguji ini dengan meletakkan direktori spool mail ke tmpfs sementara dan melihat berapa lama untuk menerima email.

Hal-hal lain yang dapat dilakukan selama jendela 90 ms adalah: pemindaian virus, pemeriksaan daftar hitam, dll. Tapi Anda mungkin tahu jika sudah dikonfigurasikan.

MikeyB
sumber
6

Praktik terbaik postfix mengatakan bahwa Anda harus melakukan sebagian besar penyaringan sebelum antrian awal untuk menghindari:

  1. membuang-buang sumber daya dalam pesan yang seharusnya tidak Anda terima;
  2. menghindari mengirim pesan kesalahan kembali (karena itu menghabiskan sumber daya untuk email asli dan pesan kesalahan);
  3. menghindari pengiriman pesan kesalahan ke penerima yang salah.

Jadi, waktu antrian tidak dioptimalkan untuk menghemat sumber daya. Jika Anda menonaktifkan semua pemeriksaan di smtpd_recipient_restrictionspostfix, main.cfAnda mungkin bisa mendapatkan antrian lebih cepat dengan biaya lebih banyak kesalahan dan mendapatkan lebih banyak pesan kesalahan (salah) kepada pengguna. Itu akan sangat diterima jika itu hanya server jalan keluar untuk aplikasi, misalnya.

jneves
sumber