Saat ini saya menjalankan nginx / 1.0.15 pada OS Centos 6.6. Server memiliki spesifikasi berikut:
- Intel (R) Atom (TM) CPU C2750 @ 2.40GHz (8 core)
- Ram 32 GB
- 5 x 6000 GB 7200 RPM (Raid 10)
Masalah
Server memiliki koneksi 1Gbit / s, namun server ini keluar dan mengalami hambatan setelah 400-500 mbit / s. Layanan mulai menurun di sekitar 100 koneksi .. dan kecepatan dengan server turun secara dramatis (walaupun memiliki bandwidth 50% masih tersedia)
Server NGINX hanya untuk melayani file .mp4 statis. Setiap file biasanya 400-1200MB (rata-rata 700MB)
Saya telah mencoba banyak konfigurasi dan hampir semuanya memberikan saya hasil yang sama .. Saya sangat frustrasi ..
Beban server juga tidak pernah melewati 0,3.
Apakah ada sesuatu yang salah atau salah arah dalam konfigurasi saya? Apa pun bisa membantu.
Konfigurasi
/etc/nginx/nginx.conf
user nginx;
worker_processes 9;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 51200;
use epoll;
}
worker_rlimit_nofile 600000;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
access_log off;
aio on;
sendfile off;
tcp_nopush off;
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 65;
output_buffers 1 3m;
#gzip on;
include /etc/nginx/conf.d/*.conf;
open_file_cache max=10000 inactive=5m;
open_file_cache_valid 2m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
}
/etc/nginx/conf.d/default.conf
server {
listen 80 default_server sndbuf=32k;
server_name _;
#charset koi8-r;
#access_log logs/host.access.log main;
include /etc/nginx/default.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /Videos/ {
root /home;
gzip off;
gzip_static off;
mp4;
mp4_max_buffer_size 300m;
}
location /stats {
stub_status on;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
sumber
Jawaban:
Awal yang lebih baik dapat berupa seperangkat aturan berikut:
Konfigurasi:
Thread pool fitur Nginx (1.7.11 atau lebih baru) dapat sangat membantu dalam kasus Anda:
Pada sampel uji, ini secara dramatis membantu Anda meningkatkan bandwidth dari 1Gbps hingga 9Gbps. Sembilan kali! Anda hanya memiliki 1Gbps tetapi semuanya dimanfaatkan.
Lihat detail lebih lanjut: https://www.nginx.com/blog/thread-pools-boost-performance-9x/
sumber
Tempat pertama yang baik untuk memulai adalah dengan file .mp4 yang sebenarnya, di mana biasanya ada area peningkatan besar.
Jadi sebelum tersesat dalam penyetelan NGINX atau Apache, tune terlebih dahulu file .mp4 Anda.
Untuk postingan sinematik ini seperti film atau acara televisi di mana setiap perubahan frame diperlukan. Dengan kata lain, mencoba mentranskode ulang film seperti "The Croods" ke 1 fps (bingkai / detik) akan mengurangi kualitas menjadi tidak dapat ditonton.
Dan non-sinematik mengacu pada tangkapan layar seperti Webinar courseware kami yang diposting ke Udemy.
Pertama, pertimbangkan komponen audio dari file tersebut. Jika komponen audio utamanya berbicara, maka gunakan ffmpeg untuk mentranskode ulang file tempat Anda menyalin aliran video (tidak ada perubahan) + ubah aliran stereo menjadi mono. Untuk banyak file .mp4 (non-sinematik) kira-kira 1/3 dari ukuran file film adalah video + 1/3 adalah saluran audio kiri + 1/3 adalah saluran audio yang tepat. Mengubah dari stereo ke mono, dapat sangat mengurangi ukuran file.
Kedua, retranscode audio menggunakan FDK-AAC ( https://github.com/mstorsjo/fdk-aac ) yang menghasilkan file yang jauh lebih kecil daripada encoder aac lainnya. Sebagian besar versi modern ffmpeg secara otomatis membuat FDK-AAC akhir-akhir ini. Bahkan Macports sekarang membuat ini. Satu pertimbangan, agar FDK dapat melakukannya, sihir asli memerlukan trek stereo + saat menggunakan kompresi audio stereo FDK yang jauh lebih kecil daripada mono, jadi jika Anda menggunakan FDK, gunakan stereo.
Ketiga, untuk mengurangi bitrate audio. Banyak kali ini adalah 48k, jadi pada umumnya menggunakan -ar 44100 (ffmpeg) atau untuk diucapkan (fi rendah) pertimbangkan untuk turun ke 22050.
Keempat, atur frame rate video Anda serendah mungkin. Jadi jika Anda melakukan tangkapan layar, bingkai hanya dapat berubah sekali dalam 10-60 detik, sehingga Anda dapat menjatuhkan frame rate menggunakan -r $ fps, berkali-kali dari 30-60 fps hingga 1-5 fps + kualitas tetap sama sementara ukuran file merosot.
Banyak kali saya kompres file non-sinematik di mana setiap 1G berkurang menjadi 10-20M.
Kelima, pastikan faststart mov atom ada di depan file Anda, sehingga file Anda dapat di-stream daripada diunduh.
Parameter fdk ffmpeg saya ...
-c: a libfdk_aac -profile: aac_he_v2-afterburner 1 -signaling eksplisit_sbr -vbr 5 -ac 2 -ar 44100
Sebenarnya, inilah perintah ffmpeg lengkap yang khas ...
Skrip mp4 hanyalah pembungkus ffmpeg yang melakukan hal-hal seperti menebak di mana trek audio + video dalam bahasa Inggris (untuk file multitrack avi + mkv) + kemudian membangun perintah ffmpeg. Yang menarik adalah perintah yang sebenarnya, yang merupakan sisa dari eksperimen bertahun-tahun.
Coba jalankan file Anda melalui kompresi ffmpeg ekstrem terlebih dahulu, kemudian lihat apakah bobot file sangat rendah / kecil, tidak diperlukan penyetelan server Web.
Area percobaan: -r $ fps + -v: crf + -v: preset + -r bitrate
Sedikit bereksperimen akan memberi Anda pengaturan untuk ukuran file terkecil + kualitas yang dapat diterima.
Banyak opsi aneh seperti + genpts + kliring SAR / DAR ada untuk memastikan file .mp4 diputar di unit Roku. Ini bagus untuk disimpan, jika Anda setiap pengaturan Saluran Roku Anda sendiri, yang merupakan cara gratis untuk mencapai 5.000.000 rumah tangga.
Perintah ffmpeg saya ...
imac> mp4 --dr --noisy foo.avi
tc: diag = v:! h264: mpeg4, a:! aac: ac3 title = 'Foo (TC)' Foo-640x480-veryfast-crf18-max-tc.mp4
cd '/Users/david/Downloads/Casper.A.Spirited.Beginning.1997.DVDrip.iNTERNAL.XviD-BPDirrier' nice -19 ffmpeg -fflags + genpts -i "foo.avi" -map 0: 0 -c: v libx264 -crf: v 18 -setet: v veryfast -tune: v film -level: v 4.1 -profil: v tinggi -ukuran: v 5000k -vf setdar = dar = 0, setsar = sar = 0 -x264opts colorprim = bt709 : transfer = bt709: colormatrix = bt709: fullrange = off -r 29,97 -movflags + faststart -map 0: 1 -c: a libfdk_aac -profile: aac_he_v2 -afterburner 1 -signaling eksplisit_sbr -vbr 5 -ac 2 -ar 44100 metadata title = 'Foo (TC)' -baca 0 -f mp4 -benchmark Foo-640x480-veryfast-crf18-max-tc.mp4.tmp mv -f Foo-640x480-veryfast-crf18-max-tc.mp4.tmp Foo-640x480-veryfast-crf18-max-tc.mp4
sumber
Mengaktifkan multi_accept berhasil untuk saya (video yang digunakan untuk berhenti sekitar setengah dan pengunjung tidak dapat mendengarkan / menonton setengah lainnya, sangat membuat frustrasi).
Satu-satunya hal yang saya atur di nginx.conf di bawah event adalah ini:
** Ini bekerja hari ini LOL .... besok kita hanya perlu melihat apakah masih bermain sepenuhnya
sumber