Tối ưu hóa php này
Tuy nhiên, nó không được biết đến chính xác với khả năng hiệu suất cao, đặc biệt là khi nói đến các hệ thống đồng thời cao. Và đó là lý do mà đối với những trường hợp sử dụng chuyên biệt như vậy, các ngôn ngữ như Node (vâng, tôi biết, nó không phải là ngôn ngữ), Go và Elixir đang chiếm ưu thế Show Điều đó nói rằng, có RẤT NHIỀU điều bạn có thể làm để cải thiện hiệu suất PHP trên máy chủ của mình. Bài viết này tập trung vào khía cạnh Trong trường hợp bạn biết PHP-fpm là gì?Không nhiều nhà phát triển quan tâm đến khía cạnh DevOps của mọi thứ và ngay cả trong số những người quan tâm, rất ít người biết điều gì đang diễn ra bên trong. Điều thú vị là, khi trình duyệt gửi yêu cầu đến một máy chủ đang chạy PHP, thì không phải PHP tạo thành điểm tiếp xúc đầu tiên; . Sau đó, các “máy chủ web” này phải quyết định cách kết nối với PHP và chuyển loại yêu cầu, dữ liệu và tiêu đề cho nó Chu kỳ yêu cầu-phản hồi trong trường hợp của PHP (Tín dụng hình ảnh. ProinerTech)Trong các ứng dụng PHP hiện đại, phần "tìm tệp" ở trên là Bây giờ, máy chủ web kết nối với PHP đã phát triển chính xác như thế nào và bài viết này sẽ dài ra nếu chúng ta đi sâu vào tất cả các chi tiết cơ bản. Nhưng nói một cách đại khái, trong thời gian Apache thống trị với tư cách là máy chủ web được lựa chọn, PHP là một mô-đun được bao gồm bên trong máy chủ Vì vậy, bất cứ khi nào nhận được yêu cầu, máy chủ sẽ bắt đầu một quy trình mới, quy trình này sẽ tự động bao gồm PHP và thực thi nó. Phương pháp này được gọi là Trong Nếu bạn đã thực hiện bất kỳ thiết lập Nginx nào hoặc thậm chí mới bắt đầu sử dụng chúng, bạn sẽ bắt gặp một số thứ như thế này location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } Dòng chúng tôi quan tâm là đây. ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log2, yêu cầu Nginx giao tiếp với quy trình PHP thông qua ổ cắm có tên ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log3. Vì vậy, đối với mọi yêu cầu đến, Nginx ghi dữ liệu thông qua tệp này và khi nhận được đầu ra, sẽ gửi lại cho trình duyệt Một lần nữa, tôi phải nhấn mạnh rằng đây không phải là bức tranh đầy đủ nhất hoặc chính xác nhất về những gì đang diễn ra, nhưng nó hoàn toàn chính xác đối với hầu hết các tác vụ DevOps Bỏ vấn đề đó sang một bên, hãy tóm tắt lại những gì chúng ta đã học được cho đến nay
Hoặc đồ họa PHP và Nginx hoạt động cùng nhau như thế nào (Tín dụng hình ảnh. DataDog)Tuyệt vời cho đến nay, nhưng bây giờ đến câu hỏi triệu đô. chính xác thì PHP-FPM là gì? Phần “FPM” trong PHP là viết tắt của “Fast Process Manager”, đây chỉ là một cách nói hoa mỹ rằng PHP chạy trên máy chủ không phải là một quy trình đơn lẻ, mà là một số quy trình PHP được sinh ra, bộ điều khiển và bị giết tắt bởi trình quản lý quy trình FPM này. Chính trình quản lý quy trình này mà máy chủ web chuyển các yêu cầu tới Bản thân PHP-FPM là một lỗ hổng hoàn toàn, vì vậy hãy thoải mái khám phá nếu bạn muốn, nhưng với mục đích của chúng tôi, phần giải thích này sẽ đủ. 🙂 Tại sao phải tối ưu hóa PHP-fpm?Vì vậy, tại sao phải lo lắng về tất cả các điệu nhảy này khi mọi thứ đang hoạt động tốt? Trớ trêu thay, đó chính xác là lời khuyên tôi đưa ra cho hầu hết các trường hợp sử dụng. Nếu thiết lập của bạn đang hoạt động tốt và không có trường hợp sử dụng đặc biệt, hãy sử dụng giá trị mặc định. Tuy nhiên, nếu bạn đang muốn mở rộng quy mô ra ngoài một máy duy nhất, thì việc vắt kiệt tối đa từ một máy là điều cần thiết vì nó có thể cắt giảm một nửa hóa đơn máy chủ (hoặc thậm chí nhiều hơn). ) Một điều khác cần nhận ra là Nginx được xây dựng để xử lý khối lượng công việc khổng lồ. Nó có khả năng xử lý hàng nghìn kết nối cùng một lúc, nhưng nếu điều tương tự không đúng với thiết lập PHP của bạn, thì bạn sẽ lãng phí tài nguyên vì Nginx sẽ phải đợi PHP hoàn thành quy trình hiện tại và chấp nhận tiếp theo, chắc chắn phủ nhận bất kỳ lợi thế nào mà Nginx được xây dựng để cung cấp Vì vậy, ngoài vấn đề đó ra, hãy xem chính xác những gì chúng ta sẽ thay đổi khi cố gắng tối ưu hóa Làm cách nào để tối ưu hóa PHP-FPM?Vị trí tệp cấu hình cho ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log6. 7. Tất nhiên, 2 là phiên bản PHP mà tôi đang chạy Đây là một vài dòng đầu tiên của tệp này trông như thế nào ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log Một vài điều nên rõ ràng ngay lập tức. dòng ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log7 cho chúng tôi biết tệp nào chứa id quy trình của quy trình php-fpm Chúng tôi cũng thấy rằng ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log9 là nơi mà php-fpm sẽ lưu trữ nhật ký của nóBên trong tệp này, thêm ba biến nữa như thế này emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s Hai cài đặt đầu tiên là cảnh báo và thông báo cho quy trình Điều này nghe có vẻ không mạnh mẽ, nhưng PHP là một tiến trình tồn tại trong thời gian ngắn và làm rò rỉ bộ nhớ, vì vậy việc khởi động lại tiến trình chính trong trường hợp lỗi cao có thể giải quyết được rất nhiều vấn đề Tùy chọn thứ ba, emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s3, yêu cầu các tiến trình con đợi khoảng thời gian này trước khi thực hiện tín hiệu nhận được từ tiến trình cha. Điều này hữu ích trong trường hợp các tiến trình con đang ở giữa một thứ gì đó khi các tiến trình cha mẹ gửi tín hiệu KILL chẳng hạn. Với mười giây trong tay, họ sẽ có cơ hội tốt hơn để hoàn thành nhiệm vụ của mình và thoát ra một cách nhẹ nhàng Ngạc nhiên thay, đây không phải là cốt lõi của cấu hình emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s6 và tệp tôi muốn chỉnh sửa là emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s7 Hãy xem tập tin này bắt đầu như thế nào ; Start a new pool named 'www'. ; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'access.log' ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data Xem nhanh phần cuối của đoạn trích trên sẽ giải đáp được thắc mắc tại sao quy trình máy chủ lại chạy dưới dạng emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s8. Nếu bạn gặp phải các vấn đề về quyền đối với tệp khi thiết lập trang web của mình, có thể bạn đã thay đổi chủ sở hữu hoặc nhóm của thư mục thành emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s8, do đó cho phép quy trình PHP có thể ghi vào tệp nhật ký và tải tài liệu lên, v.v. Cuối cùng, chúng tôi đã tìm ra nguồn gốc của vấn đề, cài đặt trình quản lý quy trình (chiều). Nói chung, bạn sẽ thấy các giá trị mặc định giống như thế này pm = dynamic pm.max_children = 5 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 4 pm.max_requests = 200 Vậy, "động" ở đây có nghĩa là gì? ; Choose how the process manager will control the number of child processes. ; Possible Values: ; static - a fixed number (pm.max_children) of child processes; ; dynamic - the number of child processes are set dynamically based on the ; following directives. With this process management, there will be ; always at least 1 children. ; pm.max_children - the maximum number of children that can ; be alive at the same time. ; pm.start_servers - the number of children created on startup. ; pm.min_spare_servers - the minimum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is less than this ; number then some children will be created. ; pm.max_spare_servers - the maximum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is greater than this ; number then some children will be killed. ; ondemand - no children are created at startup. Children will be forked when ; new requests will connect. The following parameter are used: ; pm.max_children - the maximum number of children that ; can be alive at the same time. ; pm.process_idle_timeout - The number of seconds after which ; an idle process will be killed. ; Note: This value is mandatory. Vì vậy, chúng tôi thấy rằng có ba giá trị có thể
Vì vậy, làm thế nào để các cài đặt quan trọng? Nói một cách đơn giản, nếu bạn có một trang web có lưu lượng truy cập thấp, cài đặt "động" sẽ gây lãng phí tài nguyên trong hầu hết thời gian. Giả sử rằng bạn đã đặt ; Start a new pool named 'www'. ; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'access.log' ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data1 thành 3, ba quy trình PHP sẽ được tạo và duy trì ngay cả khi không có lưu lượng truy cập trên trang web. Trong những trường hợp như vậy, "theo yêu cầu" là một lựa chọn tốt hơn, cho phép hệ thống quyết định khi nào khởi chạy các quy trình mới Mặt khác, các trang web xử lý lượng truy cập lớn hoặc phải phản hồi nhanh chóng sẽ bị trừng phạt trong cài đặt này. Tạo một quy trình PHP mới, biến nó thành một phần của nhóm và giám sát nó, là chi phí bổ sung tốt nhất nên tránh Sử dụng ; Start a new pool named 'www'. ; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'access.log' ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data2 khắc phục số lượng quy trình con, cho phép sử dụng tài nguyên hệ thống tối đa để phục vụ các yêu cầu thay vì quản lý PHP. Nếu bạn đi theo con đường này, hãy lưu ý rằng nó có những nguyên tắc và cạm bẫy. Một bài viết khá dày đặc nhưng rất hữu ích về nó là ở đây Từ cuối cùng Vì các bài viết về hiệu suất web có thể châm ngòi cho các cuộc chiến tranh hoặc gây nhầm lẫn cho mọi người, tôi cảm thấy rằng nên có một vài từ trước khi chúng ta kết thúc bài viết này. Điều chỉnh hiệu suất liên quan nhiều đến phỏng đoán và nghệ thuật hắc ám cũng như kiến thức hệ thống Ngay cả khi tất cả các bạn đều thuộc lòng các cài đặt Đồng thời, tránh kết cục là một người nghiện biểu diễn. Có, bạn có thể đạt hiệu suất cao hơn nữa bằng cách biên dịch lại PHP từ đầu và xóa tất cả các mô-đun mà bạn sẽ không sử dụng, nhưng cách tiếp cận này không đủ lành mạnh trong môi trường sản xuất. Toàn bộ ý tưởng tối ưu hóa thứ gì đó là xem xét liệu nhu cầu của bạn có khác với mặc định hay không (điều mà họ hiếm khi làm. ) và thực hiện các thay đổi nhỏ nếu cần Nếu bạn chưa sẵn sàng dành thời gian tối ưu hóa các máy chủ PHP của mình, thì bạn có thể cân nhắc tận dụng một nền tảng đáng tin cậy như Kinsta đảm nhiệm việc tối ưu hóa hiệu suất và bảo mật Làm cách nào để tối ưu hóa mã PHP?Trong bài viết này, chúng ta sẽ tìm hiểu cách tăng hiệu suất trang web bằng PHP. . Sử dụng các hàm PHP gốc Kích hoạt OPCache trên Máy chủ PHP Giảm thiểu nội dung tĩnh & bộ nhớ đệm Nâng cấp lên phiên bản PHP mới nhất Hiểu tắc nghẽn hiệu suất Tối ưu hóa mã Làm cách nào để PHP chạy nhanh hơn?Cải thiện 300% tốc độ ứng dụng PHP của bạn
. Bạn cũng có thể đóng kết nối DB và giới hạn số lần truy cập DB. Để quản lý nội dung, bạn có thể thêm CDN để phân phối nội dung nhanh chóng. take advantage of native functions, use JSON except for XML, use caching systems, configure OPcache, PHP-FPM, Memcached properly. You can also close the DB connection and limit the DB hits. For asset management, you can add CDNs for fast content delivery.
Làm cách nào để tăng tốc PHP trong Windows?Sử dụng tiện ích mở rộng bộ nhớ cache của Windows . Windows Cache Extension for PHP là một trình tăng tốc PHP được sử dụng để tăng đáng kể tốc độ của các ứng dụng PHP chạy trên hệ điều hành Windows®.
Max_input_time là gì?max_input_time — Điều này đặt thời gian tối đa tính bằng giây mà tập lệnh được phép phân tích cú pháp dữ liệu đầu vào, như POST và GET . Điều này thường được tăng lên để cho phép tải lên tệp lớn hơn. Cài đặt mặc định là -1, có nghĩa là max_execution_time được sử dụng thay thế. Đặt nó thành 0 để cho phép thời gian không giới hạn. |