Pertanyaan Node.js memaksimalkan 1000 koneksi bersamaan


Kami melakukan tolok ukur kinerja node menggunakan server simpul Hello World sederhana di AWS (EC2).

Tidak peduli apa ukuran contoh yang kita gunakan Node selalu muncul untuk maks pada 1000 koneksi bersamaan (ini TIDAK 1000 per detik, tetapi 1000 dapat menangani pada 1 waktu). Tak lama setelah itu lonjakan CPU dan node pada dasarnya membeku.

Node v0.10.5

var http = require('http');
var server = http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('loaderio-dec86f35bc8ba1b9b604db6c328864c1');
});
server.maxHeadersCount = 0;
server.listen(4000);

Node harus bisa menangani lebih dari ini benar? Pikiran apa pun akan sangat dihargai.

Juga deskriptor file (lunak, keras, sistem) diatur ke 65096)


32
2018-06-10 22:07


asal


Jawaban:


Menggunakan posix modul untuk menaikkan batas jumlah deskriptor file yang dapat digunakan proses Anda.

Memasang posix

npm install posix

Kemudian dalam kode Anda yang berjalan saat Anda meluncurkan aplikasi ...

var posix = require('posix');

// raise maximum number of open file descriptors to 10k,
// hard limit is left unchanged
posix.setrlimit('nofile', { soft: 10000 });

29
2018-06-10 22:19



Anda telah mencapai batas default deskriptor file yang dapat digunakan oleh suatu proses (1024). Anda dapat memeriksa batas pada baris perintah dengan menjalankan "ulimit -n". Untuk mengubah batas, Anda perlu mengedit /etc/security/limits.conf. Tambahkan blok tindak lanjut:

* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535

"*" berlaku untuk semua pengguna kecuali root. Batas untuk root harus ditambahkan secara terpisah. Ada batas lembut dan keras. Pengguna diizinkan untuk mengubah batasnya sendiri hingga batas lunak tetapi tidak melebihi batas keras.

Setelah file diedit, keluar dan masuk lagi. Verifikasi perubahan dengan menjalankan ulimit -n. Restart proses Node Anda dan Anda harus pergi.

Ada juga batasan deskriptor file di seluruh sistem yang dapat ditingkatkan dengan perintah berikut:

sysctl -w fs.file-max=65535

10
2018-06-11 04:18