Lệnh drush cc all` mất quá nhiều thời gian, tôi có thể làm gì?


12

Trên một trang web của tôi drush cc allmất hơn 4 phút để chạy. Trang web db là một vài GB. Tuy nhiên, tôi không thể thấy một lý do rõ ràng là tại sao nó lại mất quá nhiều thời gian. Tôi có thể làm gì để xác định vị trí cổ chai?


Kiểm tra nhật ký truy vấn mysql đầu tiên: drupal.stackexchange.com/questions/75629/NH
AgA

Bạn có chạy cron không?
mpdon Arena

Có tôi có một cron chạy. Các trang web nói chung là chậm. Vì vậy, nhiều mã di sản không có giá trị bao thanh toán lại.
awm

Tôi đồng ý với @MPD ở đây, tôi không nghĩ đây là liên quan đến bộ nhớ. MySQL cũng chỉ là một trong những lý do có thể. Chỉ có một cách để tìm hiểu và đó là hồ sơ. Cách dễ nhất để làm điều đó là sử dụng tiện ích mở rộng xhprof và phát, cũng hoạt động với drush (sử dụng -d để xem liên kết đến báo cáo). Tôi đoán là có một số vấn đề, Một vấn đề điển hình nếu trang web chậm đối với tất cả các yêu cầu bị thiếu các mô-đun, xem drupal.stackexchange.com/questions/724/why-is-drupal-7-so-slow . Lượt xem cũng có một số vấn đề về hiệu năng chính với bộ nhớ cache, xem drupal.org/node/1944674 .
Berdir

Cảm ơn bạn, tôi đã hiểu rằng tôi phải thực hiện hồ sơ, nhưng trong trường hợp cơ sở mã drupal, thật khó để xác định nút cổ chai. Mặc dù tôi đã nói rằng trang web chậm, nhưng nó không quá chậm và làm hỏng tất cả cc, chậm hơn một cách không cân xứng.
awm

Câu trả lời:


6

Việc tự xóa bộ nhớ cache không mất nhiều thời gian, vì nó chỉ cắt bớt các bảng bộ đệm. Điều cần nhiều thời gian nhất là xây dựng lại registry registry sau đó. Thông thường, đó là sổ đăng ký chủ đề quét tất cả các hook mới và tất cả các thư mục Drupal của bạn cho các tệp mẫu mới, hệ thống quét các tệp cho các mô-đun và tệp lớp mới, và tương tự.

Bạn luôn có thể xóa bộ nhớ cache cụ thể bằng cách chỉ định drush cc theme-registryhoặc bất kỳ khác.

Chúng tôi khuyên bạn nên sử dụng cơ chế bộ đệm của PHP (ví dụ: OPCache, XCache, v.v.) để tăng tốc độ xử lý. Và bộ nhớ cache cơ sở bộ nhớ để thay thế việc sử dụng nhiều trên các bảng SQL (ví dụ: memcached hoặc redis), vì vậy việc xóa bộ đệm sẽ không mất thời gian, chỉ bằng cách xóa bộ đệm (ví dụ như echo flush_all > /dev/tcp/127.0.0.1/11211trong Bash).

Ngoài ra, bạn luôn có thể xóa bộ nhớ cache theo cách thủ công , ví dụ:

echo "SHOW TABLES LIKE 'cache%'" | $(drush sql-connect) | tail -n +2 | xargs -L1 -I% echo "DELETE FROM %;" | $(drush sql-connect) -v

Gỡ lỗi

Để kiểm tra những gì mất thời gian cụ thể nhất, bạn cần gỡ lỗi / hồ sơ nó (ví dụ XDebug, XHProf, phpdbg, dtrace).

Trên OS X / Unix, điều này có thể đạt được bằng cách dtrace(sau khi chạy drush):

sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'

Trên Linux, sử dụng strace, vd

strace -e trace=sendto,recvfrom -s1000 -p $(pgrep php)

Để tìm kiếm một số điều cụ thể, hãy thử thêm ví dụ : strace ... 2>&1 | grep -C5 UPDATE.


5

Nếu bạn có một cơ sở dữ liệu thực sự lớn và hệ thống của bạn đang hoạt động tốt khi bạn không xóa bộ nhớ cache, có khả năng là bạn không có đủ bộ nhớ để hỗ trợ đầy đủ cho thiết lập của mình.

Nếu trang web của bạn đang chạy trên hộp Linux, hãy chạy 'top' (từ trình bao của bạn) và nhấn shift-M để sắp xếp danh sách quy trình theo bộ nhớ được sử dụng. Sau đó, chạy hoạt động xóa bộ nhớ cache của bạn từ một thiết bị đầu cuối khác. Bạn sẽ thấy mysql và apache tăng lên đầu danh sách. Bạn sẽ có thể xem bao nhiêu phần trăm tổng bộ nhớ mà mỗi quá trình này đang sử dụng và bao nhiêu RAM miễn phí được sử dụng. Nếu bạn có một lượng không gian ảo lớn, nhưng tất cả RAM vật lý của bạn đã cạn kiệt, thao tác này có thể khiến bộ nhớ VM bị hỏng, điều này có thể khiến thời gian thực hiện của bạn giảm xuống một phần nhỏ so với bình thường.

Một lần, tôi đang chạy một trang web Drupal lưu lượng trung bình trên một hộp với bộ nhớ đủ để hỗ trợ thiết lập. Khi tôi chạy xóa bộ nhớ cache trên một trang web có lưu lượng truy cập thấp không liên quan, việc xây dựng lại bộ đệm đã đẩy hệ thống vượt quá giới hạn của nó và tất cả mọi thứ đều bị khóa. Vì vậy, toàn bộ hành vi hệ thống là quan trọng ở đây; đây là lý do tại sao các công cụ đơn giản như 'top' là một nơi thuận tiện để bắt đầu.


Cảm ơn, tôi nghĩ nguyên nhân cơ bản là trang web đã xuất hiện được một thời gian, db hơi lớn và mã rất cần được bao thanh toán lại. Ví dụ, một hoạt động node_delete mất khoảng 3 giây. Tôi nghĩ rằng việc cho quá nhiều bộ nhớ có thể là dư thừa, bạn có đồng ý không?
awm

Tôi có nó trên máy của tôi và nó cũng chậm. Tôi đã nhân đôi bộ nhớ, lên tới 1GB và hẹn giờ với thời gian. Không tốt hơn nhiều chỉ có 4s nhanh hơn.
awm

1
Có, nếu toàn bộ trang web bị chậm mọi lúc ngay cả với nhiều bộ nhớ, thì cc không phải là vấn đề; bạn sẽ phải làm hồ sơ tổng quát hơn.
greg_1_anderson

Ngoài ra, nếu trang web thực sự cũ và cần làm mới, hãy xem xét xây dựng lại từ đầu với các mô-đun mới và sử dụng di chuyển drupal-to-drupal ( drupal.org/project/migrate_d2d ) để chuyển nội dung của bạn.
greg_1_anderson

2

Tôi sẽ không đồng ý (phần nào) với @ greg_1_anderson tại đây.

Nếu hệ thống không bị sập hoàn toàn trong thời gian a cc all, thì tôi không nghĩ bạn có vấn đề về bộ nhớ chung. Khi một máy chủ LAMP hết bộ nhớ, nó sẽ chạm vào trao đổi. Một máy chủ hoạt động nhấn trao đổi sẽ gây ra tình trạng xấu. Các quy trình httpd sẽ bắt đầu chồng lên do sự cố hệ thống (trao đổi làm cho hệ thống chạy rất chậm), điều này sẽ khiến nhiều trao đổi được sử dụng, v.v. Trên các trang web mà tôi đã thấy điều này xảy ra, tôi sẽ thấy quá trình tải đạt 100, và một tấn các quá trình httpd hoạt động.

Nếu hệ thống của bạn cuối cùng trở lại, thì tôi nghĩ bạn đang điều chỉnh kém. drush cc allsẽ dẫn đến rất nhiều truy cập cơ sở dữ liệu, vì vậy tôi nghĩ rằng nó đang hiển thị vấn đề nhiều hơn. Đề nghị của tôi sẽ là chạy mysqltuner trên trang web. Nếu bạn có một cơ sở dữ liệu nhiều GB, tôi đoán là bạn innodb_buffer_pool_sizethậm chí không có kích thước từ xa đúng cách và ví dụ MySQL của bạn đang bị phá hủy. Tôi cũng sẽ điều tra một phụ trợ bộ đệm thay thế để cố gắng giữ cho dấu chân cơ sở dữ liệu nhỏ hơn.


Cảm ơn, drupal chỉ được sử dụng cho biên tập sử dụng có một lớp servie có vecni không phù hợp với nó. Người dùng bây giờ nhận được để drupal. Tôi chỉ muốn điều tra những gì đang xảy ra bởi vì tôi nghĩ có nút cổ chai. Tôi nghĩ rằng cách tốt nhất của tôi là bật nhật ký chậm mysql và theo dõi db. Và sau đó thực hiện một số hồ sơ với
xdebug

SHOW FULL PROCESSLIST sẽ cho bạn biết những gì đang xảy ra mà không cần sử dụng nhật ký truy vấn chậm (và do đó không cần khởi động lại máy chủ). Xem câu trả lời khác cho mytop là tốt.
Chris Burgess

1

Nó có thể là môi trường lưu trữ web của bạn. Bạn đang đề cập đến một thiết lập cục bộ, hoặc một cái gì đó lưu trữ trên lưu trữ được chia sẻ hoặc VPS / máy chủ?

  • môi trường lưu trữ - nếu bạn đang sử dụng lưu trữ web được chia sẻ, dung lượng bộ nhớ Drupal / drush có thể sử dụng sẽ bị giới hạn, hãy xem: https://drupal.org/node/207036
  • thời gian thực hiện tối đa - cần phải tăng lên

drush thường không bị giới hạn bởi max_execution_time. Bạn có thể làm drush php-eval "print ini_get('max_execution_time');"để kiểm tra lại, mặc dù.
mpdon Arena

1

Đây không phải là một giải pháp hoàn chỉnh, chỉ là một công cụ nữa để giúp xác định nguồn gốc của sự chậm trễ của bạn.

Cũng như sử dụng topđể giám sát các quá trình, bạn có thể tìm thấy đầu ra của mytopthông tin. (Các câu trả lời khác ở trên giả định MySQL nhưng nếu bạn đang sử dụng một phụ trợ DB khác, bạn sẽ cần trao đổi mytop cho một công cụ tương đương.)

mytopchỉ cần thực thi MySQL SHOW FULL PROCESSLISTtrong một vòng lặp và cho bạn thấy các truy vấn nào đang được thực hiện (vì vậy sẽ mất rất nhiều thời gian). Nếu xóa bộ nhớ cache mất nhiều thời gian để dọn sạch bảng này hoặc bảng kia, bạn sẽ thấy chính xác những gì đang giữ mọi thứ ở đây. Nếu bạn không có quyền truy cập để cài đặt mytop, chỉ cần thực hiện một phiên bản thô trong vỏ của bạn -

while true; do mysql -e 'SHOW FULL PROCESSLIST' && sleep 5 && clear ; done

Nếu sự chậm trễ không xuất phát từ các truy vấn MySQL, thì công cụ này ít nhất có thể xác nhận điều đó cho bạn.


1

Tôi tìm thấy một bài đăng trên blog có tên Speed ​​Up Cache Clearing trên Drupal 7 rất hữu ích trong việc thu hẹp chính xác phần nào của quá trình xóa bộ nhớ cache đang làm mọi thứ chậm lại. Các vấn đề mà nó xác định chính xác trong mô-đun tính năngmô-đun api thực thể đã ảnh hưởng đến trang web của tôi, nhưng quá trình chi tiết trong bài viết cũng giúp tôi theo dõi các vấn đề chúng tôi gặp phải trong mô-đun Drupalđiểm dừng .

Phải mất một chút thời gian để xử lý quá trình, nhưng nó đã giúp tôi giảm bớt việc xóa bộ nhớ cache từ nhiều phút xuống dưới một phút.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.