Như đã lưu ý trong các nhận xét, lý do có thể là sự khác biệt về tốc độ đĩa giữa VM phát triển và máy sản xuất. Bạn có cùng loại ổ đĩa trong cả hai hệ thống, ví dụ như. SSD, SATA so với SCSI, tốc độ trục chính và bộ nhớ cache, v.v. Môi trường của bạn khá khác về mặt IO. Desktop Windows và VMWare sẽ sử dụng cache đĩa tích cực trong khi máy Linux sản xuất của bạn có khả năng bị lỗi ở bên an toàn và chờ dữ liệu được cam kết vào đĩa thường xuyên hơn. Có lẽ máy Windows có trình điều khiển phù hợp hơn với loại đĩa mà nó có, trong khi máy chủ đang chạy mà không cần tối ưu hóa? Sự khác biệt của hệ thống tệp cũng rất quan trọng và phần cứng có thể khác đủ để gây ra sự khác biệt đáng kể về tốc độ IO. Bạn cũng có thể có sự khác biệt lớn về tốc độ CPU và RAM. Máy tính để bàn ngày nay thường tập trung hơn vào tốc độ thô, trong khi phần cứng máy chủ sẽ tập trung nhiều hơn vào độ tin cậy. Bạn biết thiết lập của bạn tốt nhất, vì vậy bạn có thể so sánh hai hệ thống về hiệu suất phần cứng.
Ngoài ra, dưới đây là cách bạn có thể tìm hiểu những gì đang thực sự xảy ra:
Đầu tiên, hãy viết một MWe để kiểm tra khai thác gỗ. Bạn nên căn cứ trên mã thực của bạn, và sử dụng khai thác gỗ theo cách tương tự, nhưng đây là một ví dụ nhỏ:
import logging
logging.basicConfig(filename="test.log", level=logging.DEBUG)
logger = logging.getLogger("testlogger")
for i in range(0, 1000000):
logger.info("iteration: %d", i)
Sau đó chạy kịch bản dưới cProfile cả trong sự phát triển của bạn và máy sản xuất. Hãy nhớ đăng nhập vào cùng một hệ thống tệp như trong trường hợp sự cố của bạn, nếu không kết quả sẽ không được áp dụng.
python -m cProfile testlogging.py
Bạn sẽ nhận ra rằng trông như thế này:
57000501 function calls in 137.072 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 UserDict.py:4(__init__)
1 0.000 0.000 0.000 0.000 __init__.py:1044(_fixupParents)
1 0.000 0.000 0.000 0.000 __init__.py:1085(Logger)
2 0.000 0.000 0.000 0.000 __init__.py:1100(__init__)
1 0.000 0.000 0.000 0.000 __init__.py:1112(setLevel)
..... ..... ..... ..... ..... ...............................
này nên cung cấp cho bạn một ý tưởng về những gì đang gây ra sự chậm chạp trên máy sản xuất.Những điều cần tìm kiếm đặc biệt:
- Tìm các dòng đọcvà
{method 'flush' of 'file' objects}
. Điều này sẽ cho bạn biết bao nhiêu thời gian Python đã dành để ghi vào các tập tin và xóa dữ liệu vào đĩa - trong trường hợp này, tệp nhật ký. Có sự khác biệt đáng kể giữa hai máy? Nếu vậy, nó chắc chắn là một sự khác biệt trong IO (đĩa) tốc độ. Sau đó, bạn nên xem xét thiết lập đĩa của máy chủ và xem liệu có bất kỳ điều gì bạn có thể làm để có được hiệu suất đĩa tốt hơn hay không.
- Tìm các dòng có cột
percall
đầu tiên đặc biệt lớn. Cột này là tổng thời gian dành cho hàm chia cho số lượng cuộc gọi đến hàm đó. So sánh giữa hai máy và bạn có thể tìm thấy nguyên nhân gây ra sự khác biệt.
- Tìm các dòng có cột
tottime
đặc biệt lớn. Cột này là tổng thời gian trong hàm. Một lần nữa, so sánh giữa hai máy, và bạn có thể tìm thấy một số lý do cho sự khác biệt tốc độ.
Nếu bạn thấy rằng đĩa IO có vẻ là vấn đề, bạn có thể thực hiện một thử nghiệm bổ sung chỉ bằng văn bản thô cho tệp. Bạn có thể tìm thấy một chương trình điểm chuẩn cho phép bạn kiểm tra thông lượng đĩa, nhưng bạn cũng có thể viết một chương trình C (hoặc Python) đơn giản ghi dữ liệu chưa định dạng vào một tệp để đảm bảo nó thực sự là hiệu năng đĩa tinh khiết, đó là sự khác biệt.
Chỉ cần một lưu ý cuối cùng: thử nghiệm hiệu suất, như lập trình, kết hợp nghệ thuật, khoa học và kỹ thuật, và trong khi có các mẫu và lời khuyên bạn có thể làm theo, mọi trường hợp cần một chút sáng tạo để bẻ khóa. Vì vậy, hãy thử mọi thứ, đảm bảo bạn không đánh lừa bản thân và vui chơi! Chúc may mắn!
Bạn có thể đăng phiên bản của cả hai mã vạch –
của python Bạn cũng có thể kiểm tra xem chính xác cùng một nhật ký đang được sử dụng trên cả hai máy. Gói ['logging_tree'] (http://pypi.python.org/pypi/logging_tree/1.1) sẽ hữu ích ở đây. –
bạn có thể thử đăng nhập vào thiết bị xuất chuẩn và không phải để tập tin và kiểm tra xem tốc độ thay đổi. Có thể là một vấn đề với ổ đĩa cứng. –