2012-04-27 7 views
8

Tôi đang chạy một trang wordpress và mỗi quá trình sử dụng PHP khoảng 200MB đến 250MB bộ nhớ kích thước thường trú. Với 16GB ram, máy chủ chỉ có thể xử lý khoảng 70 quy trình. Bằng cách tăng bộ nhớ ảo lên 16GB, nó có thể xử lý 140. Sau đó tải tiếp tục tăng lên. Nếu có 200 kết nối trong 10 phút, tải máy chủ đạt 20 trên bộ vi xử lý quad-core 3Ghz!Làm cách nào để tối ưu hóa quá trình sử dụng bộ nhớ php?

Tôi đã thử tắt tất cả các plugin, nhưng điều này chỉ làm giảm mức sử dụng bộ nhớ PHP của mỗi quy trình ít hơn 10%. suPHP cho tôi biết người dùng nào đang sử dụng quá nhiều bộ nhớ, nhưng không phải là phần nào của mã wordpress.

Bất kỳ đề xuất nào về cách giảm mức sử dụng bộ nhớ? Hoặc là lựa chọn duy nhất của tôi để nâng cấp lên 32GB ram?

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
10585 nobody 16 0 2266m 237m 199m S 21.3 1.5 1:09.17 /usr/bin/php 
10597 nobody 16 0 2257m 255m 226m S 15.3 1.6 0:17.56 /usr/bin/php 

đầu ra lớn nhất từ ​​pmap -d

000000000e8b8000 27580 rw--- 000000000e8b8000 000:00000 [ anon ] 
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009 [ shmid=0x2d1b803a ] 
00002b37f2a62000 55108 r---- 0000000000000000 0fd:00000 locale-archive 
mapped: 2320852K writeable/private: 30012K shared: 2097152K 

TVV đầu ra

------ Semaphore Arrays -------- 

key  semid  owner  perms  nsems 
0x000000a7 0   root  600  1 
0x00000000 162529281 nobody 600  1 
0x00000000 162562050 nobody 600  1 
0x00000000 162594819 nobody 600  1 
0x00000000 162627588 nobody 600  1 
------ Message Queues -------- 

key  msqid  owner  perms  used-bytes messages` 
+0

Bạn đã thử cài đặt APC hoặc một số giải pháp bộ nhớ đệm opcode tương tự chưa? – raina77ow

+0

Có. Tôi đang sử dụng eAccelerator và Zend Optimizer. APC hiện không được bao gồm trong cPanel. Hai cái còn lại có thể được biên dịch với easyapache. – Lisa

+0

Thật kỳ lạ, tôi đang chạy một số máy chủ lưu trữ và hầu hết các phiên bản PHP tiêu thụ từ 7 đến 50 MB bộ nhớ RSS. Đề xuất của tôi là: 1. nâng cấp lên php 5.4 (vì giảm bộ nhớ bộ nhớ). 2. Cài đặt một số proxy ngược (như véc-ni) ở phía trước của wordpress. – strkol

Trả lời

5

tôi sẽ tóm tắt những gì Lisa đã làm để tìm ra vấn đề:

  • Kiểm tra cách bố trí bộ nhớ của một quá trình PHP duy nhất với pmap -d <pid>. Kết quả cho thấy rằng có một số lượng lớn bộ nhớ chia sẻ được sử dụng bởi quá trình:
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009 [ shmid=0x2d1b803a ] 
  • Kiểm tra các vùng bộ nhớ chia sẻ với ipcs -m.Nó cho thấy rằng có rất nhiều vùng bộ nhớ chia sẻ được tạo ra bởi người dùng không ai (web server), đây chỉ là một vài trong số họ:
0x00000000 117964807 nobody 600 2147483648 1 dest 
0x00000000 117997576 nobody 600 2147483648 1 dest 
0x00000000 118030345 nobody 600 2147483648 1 dest 
0x00000000 118063114 nobody 600 2147483648 1 dest 
  • Disable eAccelerator trong php.ini và xóa các vùng bộ nhớ dùng chung đã tạo:

for i in `ipcs -m | cắt -d '' -f2 | grep '^ [0-9]' `; làm ipcrm -m $ i; được thực hiện

2

Rasmus Lerdorf đã làm một cuộc họp về hiệu suất PHP tại Confoo vào năm 2010 và ông đã sử dụng một blog Wordpress là một ví dụ , điều này sẽ cung cấp cho bạn các công cụ tuyệt vời để trả lời câu hỏi của bạn:

http://talks.php.net/show/confoo10/1

Tóm lại:

  • Chạy phpinfo() và vô hiệu hóa phần mở rộng PHP mà bạn không sử dụng. Họ có thể mất rất nhiều bộ nhớ (imagick, curl, ...)
  • Tạo biểu đồ bao gồm của bạn bằng cách sử dụng phần mở rộng inclued.so. Bạn có thể tải các chức năng vô dụng trong thiết lập wordpress của bạn.
  • Chạy điểm chuẩn với siege. Đôi khi, tối ưu hóa nhỏ có tác động lớn đến hiệu suất, vì vậy hãy đảm bảo bạn có chỉ số để giúp bạn đưa ra quyết định.
  • Sử dụng callgrind để cho biết nơi bạn đang mất hiệu suất. Trong một dự án của tôi, tôi đã sử dụng md5() để băm các truy vấn SQL và lưu trữ chúng. Các cuộc gọi md5() khi sử dụng 20% ​​thời gian CPU.

Tôi chắc chắn sẽ bắt đầu bằng cách tắt tiện ích mở rộng PHP nếu có thể.

+1

Cảm ơn bạn. Strkol phát hiện ra eaccelerator là vấn đề. Khi bị vô hiệu hóa, PHP chỉ sử dụng 60m đến 80m RES cho mỗi quá trình. – Lisa

+0

@Lisa Không sao cả. Kiểm tra các công cụ được đề xuất bởi Rasmus Lerdorf nếu bạn có cơ hội. Đó là một cuộc nói chuyện tuyệt vời! – Tchoupi

+0

Câu hỏi đặt ra là về bộ nhớ và không tối ưu hóa tốc độ. –