Cara meningkatkan sambungan serentak di Apache

Hari ini saya datang untuk bercakap dengan anda sekali lagi mengenai salah satu perkhidmatan web yang paling banyak digunakan di dunia: Pelayan web Apache2.

Ini adalah topik yang telah dibincangkan berkali-kali, tetapi sekarang saya ingin memberitahu anda mengenai ciri lain yang perlu dipertimbangkan dengan perkhidmatan ini: Had sambungan serentak. Tidak menjadi masalah sama ada kita mempunyai asas atau kapal angkasa dengan pemproses i7 dan ram 32 GB ...

Had sambungan serentak akan selalu sama melainkan jika kita mengambil langkah-langkah yang sesuai, yang bermaksud bahawa jika kita ingin menghubungkan banyak orang pada masa yang sama, kita bukan sahaja memerlukan perkakasan yang baik, tetapi juga konfigurasi yang baik.

Dalam kes ini, tidak perlu memasang apa-apa, semuanya berdasarkan konsep mudah yang mesti diambil kira untuk mengkonfigurasi apache; konsep yang mesti sangat jelas sebelum mahu melakukan perubahan.

logo_apache2

Perkara pertama yang perlu difikirkan ialah: Kapasiti yang dimiliki pasukan saya? Berapa banyak sambungan serentak yang dapat disokong oleh peralatan saya jika saya memaksanya semaksimum mungkin? Semua ini bergantung pada satu faktor; RAM (Memori Akses Rawak).

Semakin besar RAM, semakin banyak bilangan sambungan, walaupun tidak ada nilai tetap (iaitu, klien X untuk setiap ram X), itulah sebabnya pertama sekali penting untuk melakukan beberapa pengiraan kecil di pelayan web kami, dengan untuk mengetahui had kita.

Perkara pertama yang harus anda ketahui adalah berapa rata-rata RAM yang digunakan setiap sambungan ke Apache, kerana setiap sambungan yang dibuat memerlukan penggunaan RAM tertentu dalam sistem ... Jelas tidak semua sambungan menggunakan ram yang sama, yang mana satu harus dibuat. media ... Semua ini boleh didapati dengan arahan berikut:

ps -ylC apache2 --sort: rss | awk '{SUM + = $ 8; I + = 1} TAMAT {cetak SUM / I / 1024} '

Hasil yang diperoleh akan ditunjukkan dalam megabait dan mungkin berbeza-beza bergantung pada jumlah sambungan aktif, jenis halaman yang diakses, dan lain-lain ... Oleh itu, disarankan untuk menjalankan ujian dengan tab yang berlainan terbuka; masing-masing menunjukkan isi yang berbeza jika boleh. Dalam kes saya, misalnya, hasilnya adalah 9.5458, yang jika kita membulatkannya ke atas akan menjadi 10 MB RAM digunakan secara purata setiap sambungan.

Juga penting untuk mengetahui berapa banyak RAM yang digunakan oleh sisa proses yang aktif dalam sistem, kerana perkhidmatan web bukan satu-satunya yang berjalan dalam sistem operasi dan perlu meninggalkan memori RAM percuma di pelayan sehingga dapat melaksanakan tugas-tugas selebihnya. Ini dapat diperoleh dengan arahan yang ditunjukkan di bawah:

ps -N -ylC apache2 --sort: rss | awk '{SUM + = $ 8} TAMAT {cetak SUM / 1024}'

Hasil yang diperoleh juga akan ditunjukkan dalam megabait, dan itu akan menunjukkan kepada kita jumlah RAM yang tepat yang digunakan oleh sisa proses; dalam kes saya 800 MB. Dengan maklumat ini kita dapat membuat pengiraan umum jumlah sambungan serentak yang kita dapat; Saya mengira bahawa kita akan memperoleh melalui operasi yang sangat mudah.

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Dengan formula ini, mari kita bayangkan bahawa kita mempunyai komputer dengan RAM 4 GB, iaitu 4096 MB dan komputer kita telah menunjukkan hasil yang disebutkan di atas; pengiraannya adalah:

(4096 - 800) / 10 = 329 sambungan serentak

Masalah dengan pengiraan ini adalah salah satu yang terlalu ekstrem, kerana ia akan menggunakan semua RAM (menjadikan pelayan menggunakan swap) dan juga, sekiranya mempunyai pangkalan data, seperti MySQL atau yang lain, sambungan ke sana juga akan memakannya RAM, jadi nombor yang diperoleh dapat memenuhi syarat sebagai nombor utopia. Oleh itu, untuk membebaskan memori untuk kemungkinan proses tambahan dan juga mempertimbangkan kemungkinan sambungan ke pangkalan data dijalankan, kami akan mengurangkan bilangan sambungan ke 250.

Sekarang kita mempunyai bilangan sambungan serentak maksimum kita, kita harus menyiapkan Apache untuk dapat menerima nombor ini, yang dilakukan dalam file konfigurasi panggilan ini apache2.conf, yang dihoskan di / dll / apache2.

Fail yang dimaksudkan mengikut struktur berdasarkan modul, masing-masing dengan nama yang sesuai, tetapi kami hanya akan berminat dengan salah satu daripadanya, yang namanya  mpm_prefork_module. Modul yang dimaksudkan mempunyai data berikut secara lalai:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Modul ini mempunyai rangkaian parameter yang sangat penting, walaupun ada salah satu daripadanya yang sangat menarik minat kami, dipanggil Pelanggan maksimum. Parameter ini menentukan bilangan maksimum sambungan serentak dan harus diubah menjadi 250.

Satu perincian yang perlu diingat adalah bahawa apabila nilai selain daripada lalai ditentukan dalam parameter tersebut, adalah perlu untuk menambahkan nilai yang lain hanya SEBELUM yang satu ini. Parameter ini dipanggil Had Pelayan dan menetapkan had sambungan yang dapat "ditahan" oleh pelayan walaupun berada di luar had.

Parameter ServerLimit semestinya sedikit lebih tinggi daripada MaxClients dan di sini, kerana ada sedikit ruang untuk manuver, had 270. Ini akan menjadikan modul kelihatan seperti ini:

StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 270 MaxClients 250 MaxRequestsPerChild 0

Sekarang hanya perlu memulakan semula perkhidmatan Apache menggunakan arahan: 

/etc/init.d/apache2 restart

Dengan ini kita sudah dapat menikmati pelayan web yang dioptimumkan.

Greetings.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   zetatin kata

    Terima kasih kerana menghantar!

    1.    drasil kata

      Saya gembira anda mendapati ia berguna.

      Greetings.

  2.   Miguel Angel kata

    Ada cara untuk mengumpulkan Apache dan dua pelayan, bolehkah anda menerangkan cara kerjanya?

    1.    drasil kata

      Walaupun saya telah membaca beberapa teori mengenainya, saya tidak pernah menggunakannya untuk mempraktikkannya. Namun, mungkin artikel ini dapat memberi anda panduan dalam hal ini, walaupun saya mengulangi bahawa saya tidak berkesempatan untuk mempraktikkannya:

      http://www.muspells.net/blog/2011/04/alta-disponibilidad-con-apache2-y-heartbeat-en-debian-squeeze/

    2.    Edward Khalil kata

      Anda telah lama meminta, jika anda tidak menyelesaikannya; Saya mempunyai skema pengimbangan dengan pihak ketiga yang berfungsi sebagai sistem fail, anda mengarahkan folder yang terdapat di var / www / html / (dalam kes saya) ke sistem fail, sehingga mereka berkongsi maklumat yang sama, dan anda mungkin akan memerlukan ip maya yang bertindak balas dan mengalihkan ke ips apache, untuk ini anda boleh menggunakan haproxy dan jika anda menginginkannya dalam ketersediaan tinggi, anda boleh mengintegrasikan keepalive sekiranya satu jatuh, yang lain terus bertindak balas, atau juga jika anda sudah memiliki domain untuk aplikasi, anda dapat mengimbangkan dengan pound melakukan backend ke kedua pelayan, untuk kes tertentu seperti moodle atau aplikasi tertentu yang menyambung ke pangkalan data di mysql, anda harus membuat pengguna per pelayan aplikasi yang menunjuk ke pangkalan data yang sama .

  3.   shamaru kata

    Terima kasih banyak untuk catatan, anda betul, ram adalah pengiraan utama, walaupun saya membayangkan bahawa kami juga mengira jumlah maksimum proses yang dapat dikendalikan oleh pemproses kami (tentu saja, pertama kali melakukan pengiraan memori utama) dan bagaimana cakera akan diedarkan dengan keras (Contoh partisi / var = 1TR).

    1.    drasil kata

      Anda betul; semuanya penting, seperti kawalan suhu antara lain. Jelas pemproses yang kuat dapat melakukan lebih banyak tugas secara serentak dengan kecekapan yang tinggi, tetapi objektif posting ini adalah untuk menjelaskan kepentingan RAM berkenaan dengan jumlah sambungan serentak.

      Cara yang baik untuk mengawal semua faktor ini dan melihat apakah pemproses kami tidak tepu atau jika kita mempunyai sedikit RAM percuma, adalah dengan menggunakan skrip bash. Mungkin siaran ini yang saya buat beberapa hari lalu tentangnya menarik untuk anda, yang saya tinggalkan di pautan berikut; Ini adalah pemantauan global tetapi mungkin menarik untuk satu:

      http://bytelearning.blogspot.com.es/2015/07/controlando-la-salud-del-equipo-con-bash.html

      salam

  4.   Sergio S. kata

    Nota yang sangat baik, terima kasih banyak!

    1.    drasil kata

      Terima kasih banyak-banyak! Saya harap anda dapat memanfaatkannya.

  5.   badut kata

    Saya tidak mahu menjadi brengsek ...
    ... Tetapi dengan meningkatkan jumlah sambungan, anda tidak akan menjadi lebih rentan terhadap serangan DDoS?

    1.    drasil kata

      Ini bukan persoalan kretin yang sunyi. Yang benar adalah bahawa dengan meningkatkan jumlah sambungan serentak, kita sebahagiannya memperkuat Apache terhadap serangan DDOS, kerana anda harus mengambil kira bahawa jumlah sambungan serentak maksimum yang dibuat di pelayan adalah jumlah sambungan maksimum, bukan yang berasal dari pengguna tunggal. Oleh itu, sementara pada awalnya kita hanya dapat menyokong 150 sambungan serentak (sama ada sambungan dari sumber yang sah atau tidak) sekarang kita boleh bergantung pada seberapa banyak sokongan pelayan kita, memerlukan bilangan sambungan yang lebih banyak pada masa yang sama untuk ditinggalkan tanpa perkhidmatan. Jelas sekali, meningkatkan bilangan sambungan maksimum bukanlah cara untuk melindungi diri anda dari jenis serangan ini, melainkan kebijakan firewall harus dilaksanakan. Sekiranya, misalnya, perkhidmatan web yang ingin anda letakkan akan terkena internet, langkah keselamatan yang dapat dilaksanakan adalah penambahan baris ini ke firewall kami:

      iptables -A INPUT -p tcp –syn –dport 80 -m connlimit -connlimit-up to 10 -m state -state BARU -j MENERIMA

      iptables -A INPUT -p tcp –dport 80 -m state -state DITETAPKAN, BERKAITAN -j TERIMA

      iptables -A INPUT -p tcp –port 80 -j DROP

      1.    badut kata

        Salah satu ciri serangan DDoS adalah penyerang kelihatan menghantar paket dari beberapa arah yang berbeza, yang menghalang aliran paket hanya datang dari satu arah.

    2.    drasil kata

      Anda benar bahawa firewall seperti yang saya tetapkan tidak begitu cekap terhadap serangan DDOS, kerana ia berasal dari pelbagai sumber. Namun, lebih baik membatasi bilangan sambungan hingga 10 untuk setiap sumber ini daripada tidak mempunyai had, sehingga setiap sumber dapat membuat seratus atau lebih sambungan.

      Bagaimanapun, kit pertanyaannya adalah bahawa semakin banyak sambungan serentak yang disokong oleh pelayan, semakin sukar untuk menjatuhkannya dengan serangan DDOS, yang akan menjadikan halaman lebih sukar untuk dirobohkan oleh penyerang .

      Greetings.

  6.   eliotime3000 kata

    Baik. Buat masa ini saya terus menggunakan NGINX di laman web saya agar tidak menyeksa VPS yang saya miliki.

  7.   Bruno cascio kata

    Pos yang bagus @Drassill!

    Saya ingin menyumbang dengan sesuatu yang mungkin lebih statistik daripada konfigurasi.
    Walaupun cara termudah dan tercepat untuk menghitung parameter penggunaan adalah dengan rata-rata, mungkin kita mungkin lebih ketat dan menggunakan "median" dan bukan "mean". Apa yang akan menyelamatkan kita? Angka itu meningkat sekiranya sambungan menghabiskan banyak memori. Sebagai contoh, anggap klien berikut yang menggunakan nilai berikut, dalam unit memori yang mereka mahukan (KB, MB, MiB, dll):

    10, 15, 150, 5, 7, 10, 11, 12

    Rata-rata akan memberi kira-kira ~ 30

    Dan ini kerana kita mempunyai hujung yang sangat besar (150), dan pengiraannya gila. Median terdiri daripada memerintahkan data ini, membahagi bilangan sampel dengan 2 (pusat kami) dan kemudian memperoleh jumlah kedudukan itu. Dengan ini kita akan mempunyai sesuatu seperti

    5, 7, 10, 10, 11, 12, 15, 150

    Jadi maksud kami adalah: 8/2 = 4 iaitu ~ 10

    Di sini anda dapat melihat bahawa tidak kira seberapa gila yang melampau, ia akan selalu memberi kita nilai yang lebih realistik. Sekiranya kita menambah pelanggan yang menggunakan 200 orang, rata-rata kita akan menjadi 11 orang, sementara rata-rata dapat mencapai …….

    Itu hanya sumbangan, dan sangat diperdebatkan, kerana dengan sambungannya tidak terganggu.

    Peluk orang linuxera 🙂

  8.   Carlos kata

    Halo, saya menghadapi masalah pada pelayan khusus saya, dan itulah setiap kali jumlah kira-kira 250 orang menghampiri dalam talian, menurut analisis google dalam masa nyata, pelayan saya seperti itu runtuh dan sambungan menjadi perlahan sehingga memutuskan sambungan ke laman web dan tidak pernah memuat naik lebih banyak daripada jumlah pengguna dalam talian, tetapi apabila saya melihat prestasi pelayan khusus iaitu ram 8gb, ia menunjukkan 10% penggunaan, CPU: 5% penggunaan dan cakera keras dalam: 1.99% penggunaan.
    Boleh kamu bantu saya? Saya tidak dapat mencari apa yang harus dilakukan, adakah langkah-langkah ini menjadi penyelesaian?

    1.    drasil kata

      Carlos yang baik.

      Masalah yang anda terangkan sangat biasa apabila pelayan tidak disiapkan dengan betul. Pelayan anda mungkin akan menerima bilangan sambungan serentak yang jauh lebih kecil dan apabila mencapai 250 sambungan, ia akan rosak. Dengan mengikuti manual, anda seharusnya dapat menyelesaikan masalahnya, walaupun jika anda mempunyai pangkalan data pada pelayan tersebut, anda juga harus mengoptimumkan pangkalan data tersebut.

      Greetings.

      1.    Carlos kata

        Drassill, saya telah melakukan konfigurasi yang anda sebutkan dan memuaskan, semalam saya menjangkau 280 pengguna dalam talian dan pelayan tidak mengalami kerosakan, saya sangat gembira dengan hasil ini, dan saya juga ingin melakukan perkara lain yang anda katakan untuk mengoptimumkan pangkalan data, ¿Bagaimana saya boleh mencapainya?

    2.    drasil kata

      Konsep pangkalan data cukup terbuka; menggunakan mysql tidak sama dengan postgres (contohnya). Jelas sekali saya tidak mengetahui semua pangkalan data; Saya telah mencuba mysql dan postgres, dan peningkatan sambungan serentak di dalamnya berdasarkan pada sambungan parameter maksimum; pengoptimuman mysql akan dilakukan di /etc/my.conf dan sambungan maksimum parameter harus diubah (antara lain). Sebagai gantinya, saya mempunyai artikel di blog saya yang menerangkan cara mengoptimumkannya yang mungkin berguna bagi anda atau yang boleh anda gunakan sebagai rujukan untuk pangkalan data anda:

      http://bytelearning.blogspot.com.es/2016/02/postgresql-una-alternativa-mysql-en.html

      Greetings.

  9.   Erickson vasquez kata

    Halo, semasa saya membuang arahan pertama, ia menunjukkan nilai 0. Apa itu?

  10.   Daniel Ojeda kata

    Terima kasih atas catatan ini.

  11.   Rolando Aguilera Salazar kata

    Manual yang bagus, maklumat itu adalah sebahagian daripada apa yang saya cari... terima kasih!

    Tetapi sekarang, jika saya mahu apabila 250 pelawat itu melebihi, pelawat 251 pergi ke halaman menunggu atau baris gilir maya, bolehkah saya melakukannya dari konfigurasi yang sama ini?

    Salam dan terima kasih!