Tăng số lượng kết nối đồng thời tới MySQL

Khi đạt đến số lượng tối đa này, máy chủ MySQL sẽ bắt đầu loại bỏ lỗi này

Hơn nữa, không ai khác có thể kết nối với nó (cho đến khi một "khe cắm" miễn phí được giải phóng) - ngay cả quản trị viên có thông tin đăng nhập gốc cũng sẽ gặp lỗi tương tự

1) Tại sao?

Hai lựa chọn

  • Lỗi code chương trình sử dụng cơ sở dữ liệu MySQL. Đồng thời, các chương trình (có thể là các trang web được viết kém trên máy chủ web hoặc các ứng dụng thông thường sử dụng MySQL làm DBMS) tạo ra một số lượng lớn các kết nối, thường chỉ có xu hướng vô cùng. Giải pháp cho tình huống này là chỉnh sửa mã của trang web bị lỗi hoặc cập nhật các chương trình lên phiên bản mới nhất và thông báo cho nhà phát triển về tình huống này. Thật dễ dàng để xác định một sự cố như vậy - sau khi khởi động lại máy chủ MySQL, các kết nối lại hết khá nhanh
  • Thật vậy, tải trên máy chủ vượt quá khả năng của nó. Theo quy định, trong trường hợp này, lỗi hiếm khi xảy ra và tự biến mất - tải không đổi và chỉ sau vài giây, bạn lại có sẵn máy chủ để kết nối

2) Làm gì?

Ngay tại đây và bây giờ để khởi động và chạy máy chủ - chỉ cần khởi động lại dịch vụ MySQL

cho debian/ubuntu

$ sudo /etc/init. khởi động lại d/mysql


cho CentOS/RedHat

$ sudo /etc/init. d/mysqld khởi động lại


cho FreeBSD

$ sudo /usr/local/etc/rc. d/mysql-server khởi động lại

Tiếp theo là gì

Trong trường hợp đầu tiên, mọi thứ đều rõ ràng - giải quyết vấn đề phần mềm

Trong trường hợp thứ hai - bạn có thể tăng số lượng kết nối tối đa đến máy chủ sẽ phục vụ MySQL. Bạn không thể tăng nó vô hạn - bạn cần xem tài nguyên vật lý của máy tính, nhưng nếu có đủ tài nguyên - hãy cho biết cài đặt đó nằm ở đâu

Hôm nay tôi lại đến để nói chuyện với các bạn về một trong những dịch vụ web được sử dụng nhiều nhất trên thế giới. máy chủ web. Apache2

Đây là một chủ đề đã được nói đến nhiều lần, nhưng bây giờ tôi muốn nói với bạn về một tính năng khác mà bạn nên cân nhắc khi sử dụng dịch vụ này. Giới hạn kết nối đồng thời. Không thành vấn đề, chúng tôi có một con tàu vũ trụ hoặc rất đơn giản với bộ xử lý i7 và RAM 32 GB

Giới hạn kết nối đồng thời sẽ luôn bằng nhau trừ khi chúng ta có biện pháp thích hợp, nghĩa là muốn nhiều người kết nối cùng lúc thì không chỉ cần thiết bị tốt mà còn cần cấu hình tốt.

Bạn không cần cài đặt bất cứ thứ gì, mọi thứ đều dựa trên các khái niệm đơn giản mà bạn cần cân nhắc khi thiết lập apache;

Tăng số lượng kết nối đồng thời tới MySQL

Điều đầu tiên cần nghĩ đến. tiềm năng của nhóm của tôi là gì?

Nhiều RAM hơn có nghĩa là nhiều kết nối hơn, mặc dù không có giá trị cố định (tức là X máy khách cho mỗi X RAM), vì vậy, điều quan trọng trước tiên là thực hiện một số phép tính nhỏ trên máy chủ web của chúng tôi để biết giới hạn của chúng tôi

Điều đầu tiên bạn nên biết là trung bình mỗi kết nối Apache tiêu thụ bao nhiêu RAM, vì mỗi kết nối được thiết lập hàm ý một lượng RAM tiêu thụ nhất định trong hệ thống. Rõ ràng, không phải tất cả các kết nối đều sử dụng cùng một RAM, điều này sẽ cần tạo phương tiện. Tất cả điều này có thể thu được bằng lệnh sau

ps -ylC apache2 --sort: rss | awk '{СУММ + = 8 $; I + = 1} END {print SUM / I / 1024} '

Kết quả sẽ được trình bày bằng megabyte và có thể thay đổi tùy thuộc vào số lượng kết nối đang hoạt động, loại trang được xem, v.v. D. Do đó, nên thử nghiệm với các tab đang mở khác nhau; . Trong trường hợp của tôi, ví dụ, kết quả là 9. 5458, nếu chúng ta làm tròn nó lên thì trung bình sẽ tiêu thụ 10 MB RAM cho mỗi kết nối

Điều quan trọng nữa là phải biết phần còn lại của các quy trình đang hoạt động trên hệ thống đang sử dụng bao nhiêu RAM, vì dịch vụ web không phải là dịch vụ duy nhất chạy trên hệ điều hành và RAM trống phải được để lại trên máy chủ để nó có thể chạy. các nhiệm vụ khác. Điều này có thể thu được bằng lệnh hiển thị bên dưới

________một

Kết quả cũng sẽ được trình bày bằng megabyte và sẽ cho chúng ta thấy khá chính xác dung lượng RAM được tiêu thụ bởi phần còn lại của các quy trình; . Với thông tin này, chúng tôi có thể thực hiện phép tính chung về số lượng kết nối đồng thời mà chúng tôi có thể có;

(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN

Với công thức này trong tay, hãy tưởng tượng rằng chúng ta có một máy tính có 4 GB RAM, tức là 4096 MB và máy tính của chúng ta đã hiển thị kết quả như trên;

(4096-800)/10 = 329 kết nối đồng thời

Vấn đề với phép tính này là nó quá cực đoan vì nó ngốn hết RAM (buộc server phải sử dụng swap) và trong trường hợp có một cơ sở dữ liệu như MySQL hay gì đó thì kết nối đến nó cũng sẽ ngốn RAM. mà số kết quả có thể được coi là một số không tưởng. Do đó, để giải phóng bộ nhớ cho các quy trình bổ sung có thể có và cũng để xem xét tạo kết nối với cơ sở dữ liệu, chúng tôi sẽ giảm số lượng kết nối xuống còn 250

Bây giờ chúng tôi có số lượng kết nối đồng thời tối đa, chúng tôi cần chuẩn bị cho Apache để nhận số này, điều này được thực hiện trong tệp cấu hình của cuộc gọi này. apache2. conf nằm trong /etc. д. /Apache2

Tệp được đề cập tuân theo cấu trúc dựa trên các mô-đun, mỗi mô-đun có một tên tương ứng, nhưng chúng tôi sẽ chỉ quan tâm đến một trong số chúng, có tên là mpm_prefork_module. Theo mặc định, mô-đun được đề cập có dữ liệu sau

StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0

Mô-đun này có một số tùy chọn rất quan trọng, mặc dù có một tùy chọn mà chúng tôi đặc biệt quan tâm có tên là MaxClients. Cài đặt này chỉ định số lượng kết nối đồng thời tối đa và nên được thay đổi thành 250

Một chi tiết cần được tính đến. khi một giá trị khác với giá trị mặc định được chỉ định trong tham số đã chỉ định, phải thêm một giá trị nữa TRƯỚC giá trị đó. Cài đặt này được gọi là ServerLimit và đặt giới hạn kết nối mà máy chủ có thể "giữ" ngay cả khi nó vượt quá giới hạn

ServerLimit phải luôn cao hơn MaxClients một chút và ở đây, vì có ít khoảng trống nên giới hạn là 270. Kết quả là, mô-đun sẽ trông như thế này