อย่ายอมแพ้ก่อนหิมะถล่ม: เตรียมเว็บเซิร์ฟเวอร์สำหรับการโหลดสูง การแคชรหัสการทำงาน ลดความเข้มของการบันทึก

วิธีเพิ่มประสิทธิภาพเซิร์ฟเวอร์บน CentOS ส่วนที่สาม: การเพิ่มประสิทธิภาพอย่างรวดเร็วของการตั้งค่าเว็บเซิร์ฟเวอร์

ในบทความนี้ เราจะบอกคุณถึงวิธีเพิ่มประสิทธิภาพของเซิร์ฟเวอร์ (เฉพาะหรือเสมือน) ในตัวอย่างของ CentOS OS โดยการปรับการตั้งค่าเว็บเซิร์ฟเวอร์ Nginx และ Apache (httpd) ให้เหมาะสมอย่างรวดเร็ว

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

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

การเพิ่มประสิทธิภาพการตั้งค่าเว็บเซิร์ฟเวอร์ Apache (httpd)

ไฟล์การกำหนดค่าเว็บเซิร์ฟเวอร์ Apache อยู่ในเส้นทางต่อไปนี้:

/etc/httpd/conf/httpd.conf

ในไฟล์นี้ จำเป็นต้องกำหนดขีดจำกัดจำนวนของกระบวนการเว็บเซิร์ฟเวอร์ที่ทำงานพร้อมกัน ในการทำเช่นนี้ ให้ค้นหาบรรทัด MaxClients ในนั้น บล็อกควรมีลักษณะดังนี้:

เริ่มเซิร์ฟเวอร์ 5
เซิร์ฟเวอร์ MinSpare 5
เซิร์ฟเวอร์สำรองสูงสุด 20
แม็กซ์ไคลเอนต์ 256
MaxRequestsPerChild 0

Maxclients ต้องคำนวณตามจำนวน RAM ที่ติดตั้งบนเซิร์ฟเวอร์ของคุณ นอกจากนี้ คุณควรพิจารณาจำนวนหน่วยความจำที่ใช้โดยกระบวนการเว็บเซิร์ฟเวอร์เดียว คุณสามารถค้นหาจำนวนหน่วยความจำที่ใช้โดยกระบวนการเว็บเซิร์ฟเวอร์เดียวโดยใช้ยูทิลิตีด้านบน คำแนะนำสำหรับการใช้งานในฐานความรู้ของเรา

จากนั้น ลบ 2/3 ของ RAM ทั้งหมดของเซิร์ฟเวอร์ของคุณ แล้วหารด้วยจำนวนหน่วยความจำที่ใช้โดยกระบวนการเว็บเซิร์ฟเวอร์เดียว จำนวนผลลัพธ์จะเป็นค่าที่เหมาะสมที่สุดของ MaxClients

ตัวอย่างเช่น เรามีเซิร์ฟเวอร์ที่มี RAM 8 GB 2\3 จาก 8 จะเป็น 5.3 GB โดยทั่วไปแล้วกระบวนการเว็บเซิร์ฟเวอร์หนึ่งกระบวนการจะใช้หน่วยความจำประมาณ 40 MB เราถือว่า 5300mb \ 40mb เราได้ 132 เป็นการดีกว่าที่จะปัดเศษลง เราปล่อยค่าไว้ 130 ดังนั้นบล็อกของไฟล์กำหนดค่าควรมีลักษณะดังนี้:

เริ่มเซิร์ฟเวอร์ 5
เซิร์ฟเวอร์ MinSpare 5
เซิร์ฟเวอร์สำรองสูงสุด 20
แม็กซ์ไคลเอนต์ 130
MaxRequestsPerChild 0

เปิดใช้งาน KeepAlive ในการทำเช่นนี้ ให้ค้นหาบรรทัดในไฟล์การกำหนดค่า:

รักษาชีวิตไว้

เปลี่ยนปิดเป็นเปิด:

รักษาชีวิตไว้

หลังจากทำการเปลี่ยนแปลงแล้ว ให้รีสตาร์ทเว็บเซิร์ฟเวอร์ด้วยคำสั่ง:

/etc/init.d/httpd รีสตาร์ท

บริการ httpd เริ่มต้นใหม่

การเพิ่มประสิทธิภาพการตั้งค่าเว็บเซิร์ฟเวอร์ Nginx

ไฟล์การกำหนดค่าเว็บเซิร์ฟเวอร์ Nginx อยู่ในเส้นทางต่อไปนี้:

/etc/nginx/nginx.conf

คุณต้องกำหนดค่าจำนวนกระบวนการ Nginx โดยปกติแล้ว การตั้งค่านี้จะขึ้นอยู่กับจำนวนแกนประมวลผลที่มีให้สำหรับเซิร์ฟเวอร์ของคุณ คำสั่ง worker_processes รับผิดชอบสิ่งนี้ ในไฟล์คอนฟิกูเรชันจะมีลักษณะดังนี้:

อาปาเช่ผู้ใช้;

pid /var/run/nginx.pid;
worker_processes 4;

อย่างที่คุณเห็น จำนวนของกระบวนการ Nginx ได้รับการกำหนดค่าสำหรับ 4 คอร์ของ CPU หากเซิร์ฟเวอร์ของคุณรองรับการเชื่อมต่อจำนวนมาก คุณสามารถเพิ่มค่านี้ลงครึ่งหนึ่ง หากคุณตั้งค่าเป็นค่าที่สูงกว่า ค่านี้จะเป็นต้นทุนประสิทธิภาพ

ผู้ปฏิบัติงาน_rlimit_nofile 65536;
เหตุการณ์ (
ใช้ epol;
worker_connections 65536;
}

สิ่งนี้จะเพิ่มขีดจำกัดสำหรับ Nginx ในจำนวนไฟล์ที่ประมวลผลและปรับปรุงประสิทธิภาพ ถ้าไฟล์คอนฟิกูเรชันของคุณมี worker_rlimit_nofile หรือ worker_connections อยู่แล้ว ให้ลบออก ปล่อยไว้เฉพาะบล็อกตามตัวอย่าง

ดังนั้น จุดเริ่มต้นของไฟล์ปรับแต่งควรมีลักษณะดังนี้:

อาปาเช่ผู้ใช้;
error_log /var/log/nginx/error.log เตือน;
pid /var/run/nginx.pid;
worker_processes 4;
ผู้ปฏิบัติงาน_rlimit_nofile 80000;
เหตุการณ์ (
ใช้ epol;
worker_connections 65536;
}
http(

แอปพลิเคชัน default_type/octet-stream;
log_format main "$remote_addr - $remote_user [$time_local] "$request" "
"$สถานะ $body_bytes_sent "$http_referer" "
""$http_user_agent" "$http_x_forwarded_for"";
access_log /var/log/nginx/access.log หลัก;

access_log off;

(คุณสามารถดูการโหลดดิสก์โดยใช้ยูทิลิตี้ด้านบน)

คุณยังสามารถเปิดใช้งานการบีบอัด Nginx Gzip การทำเช่นนี้สามารถเพิ่มความเร็วในการโหลดไซต์ของคุณ และยังเป็นประโยชน์ในการส่งเสริม seo อย่างไรก็ตาม เราขอแนะนำให้คุณตรวจสอบความเร็วในการดาวน์โหลดหลังจากเปิดใช้งาน Gzip เนื่องจาก ไซต์ที่มีคำขอจำนวนมากอาจได้รับผลกระทบในทางลบ ถึง เปิดใช้งานการบีบอัด gzip ใน nginxคุณต้องเพิ่มในส่วน http ( โค้ดดังนี้:

เปิดซิป;
gzip_comp_level 5;
gzip_min_length 10240;


gzip_disable "msie6";

เพิ่มรหัสนี้ในบรรทัดถัดไปหลังจาก http ( เพื่อให้มีลักษณะดังนี้:

ใช้ epol;
worker_connections 65536;
}
http(
เปิด gzip;
gzip_comp_level 5;
gzip_min_length 10240;
gzip_proxied หมดอายุแล้ว ไม่มีแคช ไม่มีที่เก็บ การตรวจสอบสิทธิ์ส่วนตัว
ข้อความ gzip_types/ข้อความล้วน/แอปพลิเคชัน css/แอปพลิเคชัน json/ข้อความ x-javascript/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+ข้อความ rss/แอปพลิเคชันจาวาสคริปต์/จาวาสคริปต์;
gzip_disable "msie6";
รวม /etc/nginx/mime.types;
แอปพลิเคชัน default_type/octet-stream;

หากมีการตั้งค่า Gzip ในโค้ดด้านล่าง ให้ลบออก

หลังจากกำหนดค่าเสร็จแล้ว ให้รีสตาร์ท Nginx ด้วยคำสั่ง:

/etc/init.d/nginx รีสตาร์ท

บริการ nginx เริ่มต้นใหม่

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

หากคุณมีปัญหาในการตั้งค่าและจัดการเซิร์ฟเวอร์ คุณสามารถติดต่อฝ่ายบริการสนับสนุนทางเทคนิคของเราได้ตลอดเวลา

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

นอกจากนี้ Google Page Speed ​​ยังไม่พบความแตกต่างว่าฉันได้เปิดใช้งานการแคชหรือไม่ เหตุใดฉันจึงควรโหลดเซิร์ฟเวอร์ด้วยปลั๊กอินเสริม เป็นการดีกว่าที่จะพยายามปรับแต่งเซิร์ฟเวอร์เพื่อให้ทำงานได้เร็วขึ้น จากนั้นแต่ละไซต์ก็ไม่จำเป็นต้องเร่งทีละไซต์

วิธีเพิ่มความเร็วเซิร์ฟเวอร์ apache ใน 5 นาที

แต่ก่อนที่เราจะเริ่มเร่งความเร็วเซิร์ฟเวอร์ เรามาตรวจสอบความเร็วปัจจุบันในตัวอย่างของไซต์นี้กันก่อน ฉันจะใช้การทดสอบความเร็วนี้ - การทดสอบหน้าเว็บ

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

คำแนะนำสำหรับเว็บมาสเตอร์:ความสามารถในการทำเงินบนอินเทอร์เน็ตเป็นเพียงครึ่งเดียวของการต่อสู้ ครึ่งหลังคือความสามารถในการถอนเงินอิเล็กทรอนิกส์ ต่อไปนี้คือรายการบัตรธนาคารต่างประเทศที่คุณสามารถถอนเงินออกและถอนเงินออกจากบัตรได้:

1. ผู้จ่ายเงิน- ระบบการชำระเงินที่ได้รับความนิยมมากที่สุดในโลกสำหรับฟรีแลนซ์ บัตรออกตั้งอยู่ในสหรัฐอเมริกา

2. อีเพย์เซอร์วิส- ระบบการชำระเงินของอเมริกาซึ่งเป็นที่นิยมอย่างมากในหลายประเทศมอบบัตรมาสเตอร์การ์ดใน EVRO ฟรีสำหรับผู้ที่อาศัยอยู่ใน CIS และยุโรป

3. สกริล- ระบบการชำระเงินเดียวที่ทำงานกับ cryptocurrencies และในขณะเดียวกันก็ออกบัตรธนาคาร MasterCard ฟรี

4. AdvCash- ธนาคารนอกชายฝั่งตั้งอยู่ในเบลีซ คุณสามารถเปิดบัญชีเป็นดอลลาร์ ยูโร ปอนด์ และรูเบิล

5. ผู้จ่ายเงิน- สำนักงานใหญ่ของระบบการชำระเงินนี้ตั้งอยู่ในจอร์เจีย คุณสามารถเปิดบัญชีเป็นดอลลาร์ ยูโร และรูเบิลได้ที่นี่


โดเมน RU - 99 รูเบิล
โดเมน RF - 99 รูเบิล

วันนี้ผมจะพูดถึงวิธีทำให้ Apache เร็วขึ้นเล็กน้อย จะมีคนถาม -“ ทำไม .. มีวิธีแก้ปัญหาที่เร็วกว่า!” ....
ฉันจะตอบสหายเหล่านั้นว่า ใช่ มี พวกเขาเร็วกว่า เช่น ในกระป๋องเดียว ฉันใช้ชุด Apache + Nginx (ฉันเขียนถึงมันด้วย) คุณสามารถใช้ Nginx กับโมดูล FastCGI ได้ .. และฉันจะ เขียนเกี่ยวกับสิ่งนี้ ไม่ใช่ในบทความนี้ แต่ฉันจะเขียน

แต่ตอนนี้เราจะพูดถึงวิธีทำให้ Apache เร็วขึ้น เพียงพอและปลอดภัยยิ่งขึ้น รูปภาพแท็ก "เพิ่มเติม" และบทความไป ...

โมดูลใน Apache

ขั้นแรกและพื้นฐานที่สุด บางอย่างเช่น "ขอบคุณคุณสูงสุด" - Apache จำเป็นต้องเรียกใช้ด้วยโมดูลที่จำเป็นเพื่อลดการใช้หน่วยความจำ

หากต้องการปิดใช้งาน คุณสามารถใช้คำสั่ง a2dismod<имя_модуля>จากนั้นรีสตาร์ทการกำหนดค่าเซิร์ฟเวอร์ หากคุณปิดใช้งานสิ่งผิดปกติ คุณสามารถเปิดใช้งานโมดูลด้วยคำสั่ง a2enmod<имя_модуля>. คอยดูสิ่งที่คุณปิดใช้งาน มิฉะนั้น ฟังก์ชันบางอย่างในโครงการของคุณอาจหยุดทำงาน

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

mod_alias mod_authz_host mod_deflate mod_dir mod_expires mod_headers mod_mime mod_rewrite mod_log_config mod_autoindex mod_negotiation mod_setenvif

MPM ที่เหมาะสม

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

หากความปลอดภัยเป็นสิ่งสำคัญ ให้เลือก Peruser MPM หากประสิทธิภาพเป็นสิ่งสำคัญ ให้เลือกงานที่ทำก่อนหรือคนงาน

  • ผู้ปฏิบัติงาน - การสตรีม MPM เช่น ในนั้น คำขอแต่ละรายการจะได้รับบริการในเธรดที่แยกจากกันของหนึ่งในกระบวนการลูก เธรดเป็นอ็อบเจ็กต์ที่เบากว่าสำหรับ OS มากกว่ากระบวนการ เธรดใช้หน่วยความจำอย่างมีประสิทธิภาพมากกว่า และสวิตช์บริบทสำหรับเธรดนั้นเร็วกว่า อย่างไรก็ตาม เนื่องจากข้อเท็จจริงที่ว่าแต่ละเธรดสามารถเข้าถึงหน่วยความจำทั้งหมดของกระบวนการ mpm ของผู้ปฏิบัติงานจึงมีแนวโน้มที่จะล้มเหลว: ความล้มเหลวของเธรดเดียวอาจทำให้กระบวนการทั้งหมดที่เธรดนี้ล้มเหลว (ซึ่งเป็นสาเหตุที่ผู้ปฏิบัติงาน mpm เริ่มกระบวนการย่อยหลายรายการด้วยหลายเธรดในแต่ละรายการ )
  • Perfork - mpm ใช้กระบวนการย่อยหลายกระบวนการ แต่ละกระบวนการย่อยจัดการการเชื่อมต่อเดียว เนื่องจากกระบวนการมีโครงสร้างที่หนักกว่า จึงใช้ทรัพยากรมากกว่าเล็กน้อย แต่มีโอกาสเกิดความล้มเหลวน้อยกว่า การประมวลผลคำขอแต่ละรายการไม่ได้ขึ้นอยู่กับกระบวนการอื่นๆ

สำหรับฉัน คนงานคือตัวเลือกที่ดีที่สุด

หากต้องการทราบว่าคุณกำลังเรียกใช้ MPM ใดอยู่ มีสองวิธี วิธีแรกคือการรับรายการโมดูลที่ใช้ apachectrl (สำหรับ CentOS):

Apachectl -t -D DUMP_MODULES

นี่คือตัวอย่างสำหรับระบบ Debian:

Apache2ctl -t -D DUMP_MODULES

วิธีที่สองคือการดูรายละเอียดเกี่ยวกับเวอร์ชัน Apache บน CentOS:

หากต้องการเปลี่ยน MPM ในบางระบบปฏิบัติการ คุณจะต้องคอมไพล์ apache ใหม่หรือติดตั้งแพ็คเกจ apache ที่เหมาะสม (apache2-mpm-event, apache2-mpm-prefork, apache2-mpm-itk, apache2-mpm-worker)

บนระบบ CentOS แค่ยกเลิกการใส่บรรทัดในไฟล์ /etc/sysconfig/httpd ก็เพียงพอแล้ว

HTTPD=/usr/sbin/httpd.worker

และรีสตาร์ท apache ...

แบบสอบถาม DNS

HostnameLookups เป็นคำสั่งที่รวมการสืบค้น DNS ย้อนกลับ ดังนั้น แทนที่จะใช้ที่อยู่ IP โฮสต์ DNS จะเข้าสู่บันทึก คำสั่งนี้จะทำให้คำขอช้าลงจนกว่าจะมีการตอบสนองจากเซิร์ฟเวอร์ DNS

ดังนั้น คำสั่งนี้ต้องปิดใช้งานในไฟล์กำหนดค่า: ปิด HostnameLookups

หากคุณต้องการที่อยู่ DNS ให้ใช้ logresolve

นอกจากนี้ ตรวจสอบให้แน่ใจว่าคำสั่ง Allow from และ Deny from ใช้ที่อยู่ IP เนื่องจาก apache จะทำแบบสอบถามสองรายการเพื่อให้แน่ใจว่าไคลเอ็นต์คือผู้ที่อ้างว่าเป็น

การเจรจาเนื้อหา

หากคุณไม่ต้องการ Apache
จดจำภาษาของผู้เยี่ยมชมแต่ละรายโดยอัตโนมัติและแสดงหน้าในภาษาที่เกี่ยวข้อง จากนั้นปิดใช้งานโมดูลนี้: การเจรจา a2dismod

ติดตาม SymLinks และ SymLinksIfOwnerMatch

หากเปิดใช้งานตัวเลือก FollowSymLinks สำหรับไดเร็กทอรี เซิร์ฟเวอร์จะติดตามลิงก์สัญลักษณ์ของไดเร็กทอรีนั้น หากปิดใช้งานตัวเลือกนี้ Apache จะสร้างคำขอระบบที่ไม่จำเป็นจำนวนมาก เก็บไว้บน

หากเปิดใช้งานตัวเลือก SymLinksIfOwnerMatch สำหรับไดเร็กทอรี เซิร์ฟเวอร์จะติดตามลิงก์สัญลักษณ์ก็ต่อเมื่อเจ้าของไดเร็กทอรีนี้และไฟล์/ไดเร็กทอรีที่ลิงก์อ้างถึงตรงกัน สิ่งนี้จะบอกให้ SymLinksIfOwnerMatch ส่งคำขอเพิ่มเติม ดังนั้นให้ปิด

อนุญาตให้โอเวอร์ไรด์

หากไม่ได้ตั้งค่าคำสั่ง AllowOverride เป็น 'ไม่มี' Apache จะค้นหาไฟล์ .htaccess ในทุก ๆ ไดเร็กทอรีที่เยี่ยมชม นี่คือตัวอย่าง:

DocumentRoot /var/www/html AllowOverride ทั้งหมด

หากมีการร้องขอไฟล์ /index.php Apache จะพยายามเปิดไฟล์ /.htaccess, /var/.htaccess, /var/www/.htaccess และ /var/www/html/.htaccess ซึ่งจะเพิ่มคำขอ เวลา. ดังนั้น หากคุณต้องการไฟล์นี้สำหรับไดเร็กทอรีเดียวเท่านั้น ให้ใส่คำสั่งนี้เท่านั้น:

DocumentRoot /var/www/html AllowOverride ไม่มี AllowOverride ทั้งหมด

MaxClients

คำสั่งนี้กำหนดจำนวนคำขอสูงสุดที่ Apache จะให้บริการ MaxCliets ไม่ควรเยอะ ค่านี้ถูกตั้งค่าให้ใหญ่เพื่อประมวลผลคำขอจำนวนมากในเวลาเดียวกัน และตั้งค่าให้เล็กลงเพื่อลดการใช้หน่วยความจำ!

MinSpareServers, MaxSpareServers และ StartServers

คำสั่ง MaxSpareServers และ MinSpareServers กำหนดจำนวนกระบวนการ/เธรดที่ควรรอเพื่อตอบรับคำขอ (สูงสุดและต่ำสุด) หากค่า MinSpareServers ต่ำเกินไปและมีคำขอจำนวนมากโดยไม่คาดคิด apache จะถูกบังคับให้วางกระบวนการ/เธรดใหม่จำนวนมาก ซึ่งจะสร้างโอเวอร์เฮดเพิ่มเติมในสถานการณ์ที่ตึงเครียดนี้ ในทางกลับกัน หาก MaxSpareServers สูงเกินไป apache จะโหลดระบบอย่างหนักด้วยกระบวนการเหล่านี้ แม้ว่าจำนวนไคลเอ็นต์จะน้อยก็ตาม

ตั้งค่า MinSpareServers และ MaxSpareServers เพื่อป้องกันไม่ให้ apache วางไข่มากกว่า 4 กระบวนการ/เธรดต่อวินาที หากสร้างมากกว่า 4 ข้อความเกี่ยวกับสิ่งนี้จะถูกวางไว้ใน ErrorLog ซึ่งจะระบุว่า MinSpareServers มีขนาดเล็กเกินไป

MaxRequestsPerChild

คำสั่งนี้กำหนดจำนวนคำขอที่กระบวนการย่อยหนึ่งกระบวนการสามารถดำเนินการได้ก่อนที่จะยุติ โดยค่าเริ่มต้นจะตั้งค่าเป็น 0 ซึ่งอาจนำไปสู่การรั่วไหลของหน่วยความจำ ดังนั้นให้ตั้งค่าไว้ที่นั่น เช่น 4096 ...

เลย ถ้าคุณสามารถอย่าเพิ่ม อาปาเช่, อย่าทำอย่างนั้น. พิจารณาว่า lighttpd หรือ thttpd สามารถทำงานที่คุณต้องการได้หรือไม่ เว็บเซิร์ฟเวอร์เหล่านี้มีประโยชน์มากในสถานการณ์ที่มีทรัพยากรระบบไม่เพียงพอสำหรับทุกคน แต่ควรใช้งานได้ ฉันพูดซ้ำอีกครั้ง: เรากำลังพูดถึงสถานการณ์เหล่านั้นเมื่อฟังก์ชันการทำงานของผลิตภัณฑ์เหล่านี้จะเพียงพอสำหรับการทำงาน (อย่างไรก็ตาม lighttpdสามารถทำงานร่วมกับ พี.เอช.พี). ในสถานการณ์เหล่านั้นที่ อาปาเช่ไม่มีทางหลีกเลี่ยง อย่างไรก็ตาม โดยปกติแล้ว คุณสามารถเพิ่มทรัพยากรระบบจำนวนมากได้โดยการเปลี่ยนเส้นทางคำขอไปยังเนื้อหาแบบสแตติก (JavaScript, กราฟิก) จาก อาปาเช่ไปยังเซิร์ฟเวอร์ HTTP ขนาดเล็ก ปัญหาที่ใหญ่ที่สุด อาปาเช่เป็นความกระหายที่ดีของ RAM ในบทความนี้ ฉันจะดูวิธีการที่ช่วยเพิ่มความเร็วในการทำงานและลดจำนวนหน่วยความจำที่ใช้:

  • ประมวลผลคำขอพร้อมกันน้อยลง
  • การไหลเวียนของกระบวนการ
  • การใช้ KeepAlive ที่ไม่ "ยาวเกินไป";
  • ลดการหมดเวลา;
  • ลดความเข้มของการบันทึก
  • ปิดใช้งานการแก้ไขชื่อโฮสต์
  • ปิดการใช้งาน .htaccess.
  • กำลังโหลดโมดูลน้อยลง

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

    ประมวลผลคำขอพร้อมกันน้อยลง

    ยิ่งมีกระบวนการมาก อาปาเช่ได้รับอนุญาตให้ทำงานพร้อมกัน ยิ่งสามารถจัดการคำขอพร้อมกันได้มากขึ้นเท่านั้น โดยการเพิ่มจำนวนนี้ คุณจึงเพิ่มจำนวนหน่วยความจำที่กำหนดภายใต้ อาปาเช่. ใช้ด้านบนคุณจะเห็นว่าแต่ละกระบวนการ อาปาเช่ใช้หน่วยความจำน้อยมาก เนื่องจากมีการใช้ไลบรารีที่ใช้ร่วมกัน ใน เดเบียน 5กับ อาปาเช่ 2การกำหนดค่าเริ่มต้นคือ:

    StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 20 MaxRequestsPerChild 0

    คำสั่ง สตาร์ทเซิร์ฟเวอร์กำหนดจำนวนกระบวนการของเซิร์ฟเวอร์ที่เริ่มทำงานทันทีหลังจากเริ่มทำงาน คำสั่ง เซิร์ฟเวอร์ MinSpareและ MaxSpareServersกำหนดจำนวนขั้นต่ำและสูงสุดของกระบวนการ "สำรอง" ย่อย อาปาเช่. กระบวนการดังกล่าวอยู่ในสถานะรอคำขอที่เข้ามาและไม่ถูกยกเลิกการโหลด ซึ่งทำให้สามารถเร่งความเร็วการตอบสนองของเซิร์ฟเวอร์ต่อคำขอใหม่ได้ คำสั่ง MaxClientsกำหนดจำนวนคำขอพร้อมกันสูงสุดที่ประมวลผลโดยเซิร์ฟเวอร์ในเวลาเดียวกัน เมื่อจำนวนการเชื่อมต่อพร้อมกันเกินจำนวนนี้ การเชื่อมต่อใหม่จะถูกจัดคิวสำหรับการประมวลผล ในความเป็นจริงคำสั่ง MaxClientsและกำหนดจำนวนกระบวนการลูกสูงสุดที่อนุญาต อาปาเช่วิ่งในเวลาเดียวกัน คำสั่ง MaxRequestsPerChildกำหนดจำนวนคำขอที่กระบวนการย่อยควรดำเนินการ อาปาเช่ก่อนจะสิ้นสภาพไป หากค่าของคำสั่งนี้เป็นศูนย์ กระบวนการจะไม่ "หมดอายุ"

    สำหรับโฮมเซิร์ฟเวอร์ของฉัน ด้วยความต้องการที่เหมาะสม ฉันเปลี่ยนคอนฟิกูเรชันเป็นดังต่อไปนี้:

    StartServers 1 MinSpareServers 1 MaxSpareServers 1 MaxClients 5 MaxRequestsPerChild 300

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

    การไหลเวียนของกระบวนการ

    อย่างที่คุณเห็น ฉันเปลี่ยนค่าของคำสั่ง MaxRequestsPerChild. ด้วยการจำกัดอายุการใช้งานของกระบวนการย่อยด้วยวิธีนี้ตามจำนวนคำขอที่ประมวลผล คุณสามารถหลีกเลี่ยงการรั่วไหลของหน่วยความจำโดยไม่ตั้งใจซึ่งเกิดจากสคริปต์ที่คด

    ใช้ KeepAlive ไม่นานเกินไป

    ให้มีชีวิตอยู่เป็นแนวทางสนับสนุน การเชื่อมต่อแบบถาวรระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ ในขั้นต้นโปรโตคอล HTTP ได้รับการพัฒนาโดยไม่ได้มุ่งเน้นไปที่การเชื่อมต่อแบบถาวร นั่นคือ เมื่อหน้าเว็บถูกส่งไปยังไคลเอนต์ ส่วนประกอบทั้งหมด (รูปภาพ, เฟรม, JavaScript) จะถูกส่งโดยใช้การเชื่อมต่อที่แตกต่างกันและแยกกัน ด้วยการถือกำเนิดขึ้น ให้มีชีวิตอยู่เบราว์เซอร์มีความสามารถในการร้องขอการเชื่อมต่อแบบถาวร และเมื่อสร้างการเชื่อมต่อแล้ว จะดาวน์โหลดข้อมูลโดยใช้การเชื่อมต่อที่สร้างขึ้นเพียงครั้งเดียว วิธีนี้ช่วยเพิ่มประสิทธิภาพอย่างมาก อย่างไรก็ตาม อาปาเช่ตามค่าเริ่มต้น จะใช้เวลาหมดเวลานานเกินไปก่อนที่จะปิดการเชื่อมต่อ ซึ่งเท่ากับ 15 วินาที ซึ่งหมายความว่าหลังจากมอบเนื้อหาทั้งหมดให้กับลูกค้าที่ร้องขอแล้ว ให้มีชีวิตอยู่โปรเซสลูกจะรอคำขอที่เข้ามาอีก 15 วินาที มากเกินไปอย่างไรก็ตาม เป็นการดีกว่าที่จะลดระยะหมดเวลานี้ลงเหลือ 2-3 วินาที

    KeepAliveTimeout 2

    ลดการหมดเวลา

    หรือคุณสามารถลดค่าของคำสั่งได้ หมดเวลาซึ่งระบุเวลาในการรอให้คำขอแต่ละรายการดำเนินการให้เสร็จสิ้น โดยค่าเริ่มต้น ค่าของมันคือ 300 บางที ในกรณีของคุณ การลด/เพิ่มค่านี้น่าจะสมเหตุสมผล ผมเองก็ปล่อยไว้ตามเดิม

    ลดความเข้มของการบันทึก

    ระหว่างทางในการเพิ่มประสิทธิภาพเซิร์ฟเวอร์ คุณสามารถลองลดความเข้มของการบันทึก โมดูลเช่น mod_rewriteสามารถเขียนข้อมูลการดีบักลงในบันทึก และหากคุณไม่ต้องการ ให้ปิดเอาต์พุต

    ปิดใช้งานการแก้ไขชื่อโฮสต์

    ในความคิดของฉัน ไม่จำเป็นต้องทำวิศวกรรมย้อนกลับที่อยู่ IP ให้เป็นชื่อโฮสต์ หากคุณต้องการอย่างมากในการวิเคราะห์บันทึก คุณสามารถระบุได้ในขั้นตอนการวิเคราะห์ ไม่ใช่ระหว่างการทำงานของเซิร์ฟเวอร์ คำสั่งมีหน้าที่รับผิดชอบในการแก้ไขชื่อโฮสต์ ชื่อโฮสต์การค้นหาซึ่งจริงๆ แล้วเป็นค่าดีฟอลต์และตั้งค่าเป็น ปิดอย่างไรก็ตาม ลองดูว่าคุณรู้สึกว่าจำเป็นต้องปิดการแปลงจริงๆ หรือไม่

    ชื่อโฮสต์ปิดการค้นหา

    ปิดการใช้งาน .htaccess

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



    มีคำถามหรือไม่?

    รายงานการพิมพ์ผิด

    ข้อความที่จะส่งถึงบรรณาธิการของเรา: