Chức năng memory_get_usage có thể được sử dụng để theo dõi việc sử dụng bộ nhớ. Chức năng 'malloc' không được sử dụng cho mọi khối được yêu cầu, thay vào đó, một lượng lớn bộ nhớ hệ thống được phân bổ và biến môi trường được thay đổi và quản lý nội bộ
Hai loại sử dụng bộ nhớ khác nhau là -
- Bộ nhớ mà động cơ yêu cầu từ HĐH [mức sử dụng thực]
- Dung lượng bộ nhớ mà ứng dụng đã thực sự sử dụng [sử dụng nội bộ]
Việc sử dụng bộ nhớ được đề cập ở trên có thể được theo dõi bằng memory_get_usage[]. Hàm này trả về cả bộ nhớ thực và bộ nhớ thực được sử dụng tùy thuộc vào yêu cầu của chúng tôi
Ví dụ. nếu chúng tôi đang xem các đoạn mã cụ thể, bộ nhớ trong có thể liên quan. Mặt khác, nếu việc sử dụng bộ nhớ đang được theo dõi trên toàn cầu, thì việc sử dụng thực tế sẽ phù hợp hơn
Theo dõi mức sử dụng RAM của các ứng dụng PHP của bạn có thể hữu ích, đặc biệt nếu bạn nhận thấy mức tiêu thụ bộ nhớ cao khi chạy một thuật toán
Bạn đang chạy một ứng dụng Symfony trên máy chủ sản xuất của mình và đột nhiên bạn nhận thấy mức sử dụng bộ nhớ tăng đột biến trên bảng điều khiển Grafana tuyệt đẹp của mình
Bạn đã xác định được nguyên nhân của sự cố và bạn có thể sao chép nó trên máy chủ phát triển cục bộ của mình
Bây giờ bạn muốn biết lượng bộ nhớ được tiêu thụ trong quá trình thực thi tập lệnh của mình. PHP có các chức năng tích hợp cho điều đó
Hãy cùng xem memory_get_usage[]
và memory_get_peak_usage[]
memory_get_usage
Việc thực hiện chức năng này như sau
memory_get_usage[bool $real_usage = false]: int
Tham số real_usage
có thể được sử dụng để nhận các giá trị khác nhau
true
sẽ trả về bộ nhớ được sử dụng bởi trình quản lý bộ nhớ Zend Engine và do đó, bộ nhớ thực sự được sử dụng bởi quy trình PHPfalse
sẽ trả lại bộ nhớ được sử dụng để chạy tập lệnh
Nếu bạn muốn biết một lệnh gọi hàm đã sử dụng bao nhiêu bộ nhớ, sử dụng mức sử dụng thực là vô ích, nhưng nó hữu ích cho điểm chuẩn
memory_get_peak_usage[]
Hàm này có cùng tham số real_usage
Usage: 0.44483184814453 MBs
Usage: 0.51425933837891 MBs
Usage: 0.61490631103516 MBs
Usage: 0.65305328369141 MBs
Usage: 0.81620025634766 MBs
Usage: 0.85434722900391 MBs
Usage: 0.89249420166016 MBs
Usage: 0.93064117431641 MBs
Usage: 1.2187881469727 MBs
Peak usage: 1.2569732666016 MBs
0 cóGiá trị trả về sẽ là bộ nhớ tối đa mà quá trình thực thi cần
Các trường hợp sử dụng của từng chức năng là gì?
Dưới đây là một ví dụ về thuật toán tiêu thụ bộ nhớ cao
Tạo các chuỗi ngẫu nhiên và đẩy chúng vào một mảng — PHP 8. 1Đây là đầu ra của tập lệnh này [PHP 8. 1]
Usage: 0.44483184814453 MBs
Usage: 0.51425933837891 MBs
Usage: 0.61490631103516 MBs
Usage: 0.65305328369141 MBs
Usage: 0.81620025634766 MBs
Usage: 0.85434722900391 MBs
Usage: 0.89249420166016 MBs
Usage: 0.93064117431641 MBs
Usage: 1.2187881469727 MBs
Peak usage: 1.2569732666016 MBs
Bây giờ bạn đã biết cách sử dụng các chức năng này, bạn có thể gỡ lỗi ứng dụng của mình và xem mức tiêu thụ bộ nhớ của ứng dụng bất kỳ lúc nào
Nếu bạn muốn tìm hiểu về PHP, việc sử dụng bộ nhớ tập lệnh không phải là một trong những điều đầu tiên bạn sẽ tập trung vào. Nhưng biết điều này có thể cực kỳ hữu ích cho bạn, đặc biệt nếu bạn muốn trở thành một nhà phát triển giỏi hơn
Tại sao việc kiểm tra mức sử dụng bộ nhớ tập lệnh PHP lại quan trọng?
Hiệu quả bộ nhớ thường bị bỏ qua khi xem xét các yêu cầu của ứng dụng web. Nói chung, điều này không sao vì có những điều quan trọng khác cần xem xét, chẳng hạn như các phương pháp xác thực tốt và bảo mật SQL chẳng hạn
Nhưng nếu bạn sử dụng quá nhiều bộ nhớ trong thiết bị của mình, bạn có thể gặp một số vấn đề. Điều này có thể dẫn đến sự cố, lỗi rất khó tìm và thậm chí có thể gây ra các cuộc tấn công từ chối dịch vụ
Điều này thậm chí còn trở nên quan trọng hơn trong các trang web có lưu lượng truy cập cao nơi việc thực thi các tập lệnh đồng thời có xu hướng xảy ra. Ngoài ra, các vấn đề liên quan đến bộ nhớ có thể dễ dàng gây ra các vấn đề khác
Cách kiểm tra việc sử dụng tập lệnh bộ nhớ tập lệnh PHP của bạn
Là người dùng Mac, điều quan trọng là bạn phải chăm sóc thiết bị của mình để đảm bảo thiết bị luôn hoạt động trơn tru. Một điều bạn có thể làm như một phần của quy trình bảo trì là thỉnh thoảng kiểm tra mức sử dụng bộ nhớ máy Mac của bạn. Để kiểm tra điều này, PHP đi kèm với một chức năng tích hợp sẵn để trả về dung lượng bộ nhớ được phân bổ cho tập lệnh PHP. chức năng là
memory_get_usage[]
Mặc dù chức năng này trả lại dung lượng bộ nhớ được phân bổ cho tập lệnh PHP, nhưng bạn sẽ thấy số lượng tính bằng byte. Nếu bạn muốn chuyển đổi số tiền này thành KB, hãy sử dụng
memory_get_usage/1024
Nếu bạn muốn chuyển số tiền này sang MB, hãy sử dụng
memory_get_usage/1048576
Ngoài việc sử dụng các chức năng trên, có một chức năng quan trọng khác mà bạn có thể sử dụng. Lần này, hàm sẽ trả về dung lượng bộ nhớ tối đa mà tập lệnh PHP sử dụng cho đến khi bạn gọi hàm. Đối với điều này, bạn sử dụng
memory_get_peak_usage[]
Bạn có thể sớm phát hiện ra rằng mức sử dụng bộ nhớ hiện tại của thiết bị sẽ giảm sau khi bạn bỏ đặt mảng trong khi mức sử dụng cao nhất vẫn giữ nguyên. Lý do cho điều này là hàm này nhận một "đối số boolean" tùy chọn với giá trị mặc định sai. Lập luận này là
$real_usage
Bạn còn có thể làm gì khác nữa không?
Có thể đôi khi bạn sẽ thấy quá khó khăn để có được đầu ra từ các chức năng được đề cập ở trên. Điều này đặc biệt đúng khi mức sử dụng bộ nhớ của thiết bị phụ thuộc vào các yếu tố khác như giá trị chuỗi yêu cầu
Đôi khi, các vấn đề về trí nhớ chỉ xảy ra sau một thời gian hoặc trong những trường hợp rất cụ thể. Trong những trường hợp như vậy, chỉ cần kiểm tra mức sử dụng bộ nhớ của bạn là không đủ. Đối với điều này, một điều bạn có thể làm là sử dụng cơ sở dữ liệu hoặc tệp nhật ký để ghi lại việc sử dụng bộ nhớ của thiết bị
Để có giải pháp hiệu quả hơn, bạn nên để PHP làm việc cho bạn. Kiểm tra xem mức sử dụng bộ nhớ của thiết bị có quá cao không. Nếu không, bạn có thể tiếp tục thực thi tập lệnh
Nếu không, bạn có thể gửi email thông báo cho chính mình có chứa thông tin gỡ lỗi có liên quan. Làm điều này giúp bạn dễ dàng kiểm tra các tập lệnh của máy Mac một cách tích cực hơn để tìm ra điều gì đó không ổn càng sớm càng tốt
Đặt giới hạn bộ nhớ
Nếu không muốn Mac sử dụng quá nhiều bộ nhớ, bạn có thể đặt giới hạn bộ nhớ cho PHP bằng hàm
ini_set[]
Chẳng hạn, bạn có thể đặt giới hạn bộ nhớ PHP của mình theo cách này
ini_set['memory_limit','512M']
Ngoài việc đặt giới hạn cho PHP, bạn cũng có thể tăng giới hạn này. Giới hạn bộ nhớ của PHP là "mỗi tập lệnh", có nghĩa là nó đặt số lượng tối đa mà mỗi tập lệnh có thể phân bổ. Điều này ngăn mọi tập lệnh được viết kém sử dụng hết bộ nhớ khả dụng trên máy chủ của bạn
Cài đặt giới hạn của PHP không giống như một không gian lưu trữ đơn giản nơi một số tập lệnh PHP phát triển bên trong hoặc nhóm từ. Do đó, khi bạn chặn cài đặt này, bạn có thể thấy kết quả xuất ra lỗi giống như sau
PHP Lỗi nghiêm trọng. Hết bộ nhớ [được phân bổ x] [đã cố phân bổ x byte] trong /path/to/php/script
hoặc
Lỗi nghiêm trọng. Kích thước bộ nhớ cho phép của x byte đã cạn kiệt [đã cố phân bổ x byte] trong /path/to/php/script
Chẳng hạn, nếu bạn yêu cầu hai hoặc nhiều tập lệnh cùng lúc, thì tập lệnh này hoàn toàn tách biệt với tập lệnh kia. Nói cách khác, cài đặt memory_limit không phải là thứ mà họ chia sẻ
PHP không hỗ trợ đa luồng và nó cũng không được thiết kế cho việc này. Điều này có nghĩa là nếu một số tập lệnh sử dụng tất cả 100MB cùng một lúc, điều này sẽ có tổng mức sử dụng bộ nhớ là 500MN của PHP. Nếu giới hạn bộ nhớ PHP của bạn là 128 MB, thì bạn sẽ không đạt được nó
Tuy nhiên, nếu bạn sử dụng các tập lệnh yêu cầu các tập lệnh PHP nội tuyến khác bằng cách sử dụng bao gồm một lần, yêu cầu hoặc bao gồm, giới hạn sẽ được kế thừa và chia sẻ bởi tất cả các tập lệnh phụ thuộc vào tập lệnh gốc
Sự kết luận
Học cách kiểm tra mức sử dụng bộ nhớ tập lệnh PHP của máy Mac có thể không nằm ở đầu danh sách ưu tiên của bạn nhưng nó vẫn là một điều quan trọng. Nhưng khi biết các quy trình này, bạn có thể dễ dàng khắc phục sự cố thiết bị của mình trong trường hợp gặp phải bất kỳ sự cố nào