SoapUI Chậm: Nguyên Nhân và Cách Khắc Phục

INEZA Felin-Michel

INEZA Felin-Michel

21 tháng 4 2026

SoapUI Chậm: Nguyên Nhân và Cách Khắc Phục

Tóm tắt

Hiệu suất chậm của SoapUI xuất phát từ việc khởi động JVM tốn tài nguyên, cài đặt bộ nhớ mặc định quá thấp cho các dự án lớn và độ trễ khi phân tích cú pháp WSDL. Các biện pháp khắc phục cụ thể (tinh chỉnh kích thước heap, bộ nhớ đệm WSDL, chia tách dự án) có thể cải thiện đáng kể tốc độ. Nếu nhóm của bạn cần một công cụ nhanh hơn để loại bỏ hoàn toàn những nút thắt này, Apidog chạy mà không cần môi trường thực thi Java.

💡
Apidog là một nền tảng phát triển API tất cả trong một miễn phí, chạy trên trình duyệt hoặc ứng dụng máy tính để bàn nhẹ, giúp loại bỏ hoàn toàn chi phí khởi động JVM và việc tinh chỉnh bộ nhớ. Hãy dùng thử Apidog miễn phí, không cần thẻ tín dụng.
Tải ứng dụng

Giới thiệu

SoapUI chạy chậm. Nếu bạn đã sử dụng nó trong vài tuần, bạn chắc hẳn đã trải qua cảnh khởi động mất 30 giây, giao diện người dùng không phản hồi khi phân tích cú pháp một tệp WSDL lớn, hoặc quá trình chạy thử nghiệm ì ạch khi bạn có hàng trăm bước kiểm thử. Đây không phải là lỗi. Đây là kết quả tự nhiên của cách SoapUI được xây dựng.

Hướng dẫn này giải thích các lý do kỹ thuật cụ thể khiến SoapUI chậm, đưa ra các biện pháp khắc phục cụ thể cho từng vấn đề và giải thích giới hạn của chúng. Một số vấn đề về độ chậm bạn có thể khắc phục. Một số khác thì không thể nếu không chuyển đổi công cụ.

Nguyên nhân gốc 1: Chi phí khởi động JVM

SoapUI là một ứng dụng Java Swing. Mỗi khi bạn khởi chạy, nó bắt đầu một Máy ảo Java (JVM), tải hàng trăm tệp lớp (class files), khởi tạo framework Spring, tải dự án của bạn và hiển thị giao diện Swing. Trên một máy tính hiện đại có ổ SSD, việc này mất từ 20-60 giây. Trên phần cứng cũ hơn, có thể vượt quá 90 giây.

Tại sao điều này xảy ra: Các ứng dụng Java phải chịu một chi phí khởi động mà các ứng dụng gốc (native applications) không có. JVM cần phải thông dịch hoặc biên dịch JIT bytecode trước khi quá trình thực thi bắt đầu. Việc khởi tạo giao diện người dùng Swing càng làm tăng thêm chi phí này.

Các biện pháp khắc phục:

Giữ SoapUI mở. Cách khắc phục đơn giản nhất là không đóng nó giữa các lần chạy thử nghiệm. Một khi JVM đang chạy, nó sẽ giữ trạng thái "nóng" (warm).

Sử dụng ổ đĩa nhanh. Nếu bạn đang chạy SoapUI từ một ổ cứng HDD, hãy chuyển nó sang ổ SSD. Giai đoạn tải lớp (class-loading) đọc nhiều tệp nhỏ, đây chính là lúc SSD vượt trội hơn HDD.

Sử dụng Java 11 hoặc 17 thay vì 8. Các phiên bản JVM mới hơn đã cải thiện thời gian khởi động. Kiểm tra xem SoapUI được cấu hình để sử dụng JDK nào trong soapui.bat (Windows) hoặc soapui.sh (Linux/Mac). Dòng đầu tiên thiết lập đường dẫn Java home. Chuyển sang JDK mới hơn có thể giảm thời gian khởi động.

Bật AppCDS (Application Class Data Sharing). Tính năng JVM này lưu trước bộ nhớ đệm dữ liệu tải lớp (class loading data). Nó yêu cầu thiết lập một lần nhưng giảm thời gian khởi động các lần tiếp theo. Thêm -XX:+UseAppCDS -XX:SharedArchiveFile=soapui.jsa vào các đối số JVM của bạn.

Nguyên nhân gốc 2: Cài đặt bộ nhớ mặc định quá thấp

SoapUI đi kèm với cài đặt kích thước heap mặc định thấp. Việc mở một dự án lớn hoặc chạy một bộ kiểm thử dài khiến JVM phải dành thời gian cho việc thu gom rác (garbage collection), điều này làm tạm dừng ứng dụng và khiến nó trở nên ì ạch.

Cài đặt mặc định (từ soapui.vmoptions hoặc soapui.bat):

-Xms128m
-Xmx768m

Điều này có nghĩa là SoapUI khởi động với 128 MB heap và có thể sử dụng tối đa 768 MB. Các máy tính hiện đại có 8-32 GB RAM. Việc để SoapUI ở mức 768 MB gây áp lực thu gom rác liên tục đối với bất kỳ dự án lớn nào.

Khắc phục: tăng kích thước heap

Trên Windows, chỉnh sửa <SoapUI_Install>/bin/SoapUI.vmoptions:

-Xms512m
-Xmx2048m

Trên macOS, chỉnh sửa SoapUI.app/Contents/vmoptions.txt hoặc tìm soapui.sh:

JAVA_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"

Trên Linux, chỉnh sửa <SoapUI_Install>/bin/soapui.sh:

JAVA_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"

Khuyến nghị:

Xác minh khắc phục: Sau khi khởi động lại SoapUI, mở hộp thoại Help > System Properties. Bạn sẽ thấy các giá trị heap đã được cập nhật. Theo dõi trình quản lý tác vụ (task manager) để xác nhận SoapUI đang sử dụng phân bổ mới.

Nguyên nhân gốc 3: Tệp dự án lớn

SoapUI lưu trữ mọi thứ trong một tệp XML duy nhất. Các dự án có nhiều bộ kiểm thử, các phần thân yêu cầu lớn hoặc dữ liệu nhị phân nội tuyến sẽ làm tệp này phình to. Việc mở và lưu một tệp dự án 10 MB chậm hơn đáng kể so với tệp 500 KB.

Dấu hiệu của vấn đề này:

Các biện pháp khắc phục:

Nguyên nhân gốc 4: Độ trễ khi phân tích cú pháp WSDL

Khi SoapUI mở một dự án tham chiếu đến các tệp WSDL, nó có thể phân tích lại các tệp WSDL đó khi khởi động hoặc khi bạn mở rộng cây giao diện. Nếu các tệp WSDL của bạn được lưu trữ trên một máy chủ từ xa hoặc có kích thước lớn (nhiều thao tác, kiểu phức tạp), việc phân tích này sẽ thêm vào độ trễ đáng kể.

Dấu hiệu của vấn đề này:

Các biện pháp khắc phục:

Nguyên nhân gốc 5: Hiệu suất chạy thử nghiệm trên các bộ kiểm thử lớn

Chạy một bộ kiểm thử với hàng trăm trường hợp kiểm thử có thể chậm, đặc biệt khi mỗi bước kiểm thử có các tập lệnh Groovy phức tạp, xác nhận (assertions), hoặc các cuộc gọi mạng.

Các biện pháp khắc phục:

Những gì bạn không thể khắc phục

Một số vấn đề về hiệu suất của SoapUI mang tính cấu trúc. Không có lượng tinh chỉnh nào có thể thay đổi được:

Khi nào nên chuyển đổi

Nếu bạn đã áp dụng các biện pháp khắc phục trên mà SoapUI vẫn cản trở quy trình làm việc của bạn, thì nút thắt cổ chai có thể không thể khắc phục được thông qua cấu hình.

Apidog chạy dưới dạng ứng dụng web được hỗ trợ bởi một client Node.js, không phải JVM. Nó mở trong vài giây. Việc thực thi kiểm thử không yêu cầu môi trường thực thi Java trên máy của bạn. Đối với các nhóm mà nút thắt chính là thời gian khởi động của SoapUI và khả năng phản hồi của giao diện người dùng, việc chuyển đổi công cụ sẽ hiệu quả hơn là liên tục tinh chỉnh JVM.

Đánh đổi: Apidog không phân tích cú pháp WSDL. Nếu bạn phụ thuộc vào tính năng nhập WSDL của SoapUI để tích hợp dịch vụ mới, bạn có thể muốn giữ SoapUI cho tác vụ cụ thể đó trong khi thực hiện kiểm thử hàng ngày trong Apidog.

Câu hỏi thường gặp

Kích thước heap khuyến nghị cho SoapUI với một dự án lớn (hơn 50 bộ kiểm thử) là bao nhiêu?Đặt -Xmx ít nhất là 2 GB, lý tưởng là 4 GB nếu máy của bạn có 16 GB RAM trở lên. Đặt -Xms từ 512 MB đến 1 GB để tránh việc mở rộng heap dần dần. Sử dụng -XX:+UseG1GC để có hiệu suất thu gom rác tốt hơn.

Tôi có thể kiểm tra việc sử dụng heap hiện tại của SoapUI không?Có. Vào Help > System Properties. Điều này hiển thị các đối số JVM bao gồm cài đặt heap. Bạn cũng có thể thêm -verbose:gc vào các tùy chọn JVM tạm thời để xem hoạt động thu gom rác trong nhật ký của SoapUI.

Việc chuyển sang JDK mới hơn có cải thiện hiệu suất của SoapUI không?Trong hầu hết các trường hợp, có. Thời gian khởi động JVM và việc thu gom rác đã được cải thiện trong Java 11 và 17 so với Java 8. Kiểm tra ghi chú phát hành của SoapUI để biết phiên bản JDK được khuyến nghị, vì một số phiên bản JDK mới hơn có thể có vấn đề tương thích với các bản phát hành SoapUI cũ hơn.

Tại sao SoapUI lại chậm lại sau khi chạy kiểm thử vài giờ?Phân mảnh bộ nhớ và chi phí thu gom rác tăng lên theo thời gian. Đóng và mở lại SoapUI sẽ đặt lại trạng thái JVM. Việc tăng -Xmx và sử dụng G1GC làm trì hoãn sự suy giảm này nhưng không loại bỏ hoàn toàn.

Chạy SoapUI trên máy chủ (headless) có cải thiện hiệu suất không?Có, ở một mức độ nào đó. Chế độ headless (-Dorg.uncommons.watchmaker.swing.SwingEvolutionMonitor=false và các cờ tương tự) giảm chi phí hiển thị Swing. Sử dụng công cụ chạy kiểm thử dòng lệnh cho CI/CD thay vì giao diện người dùng đồ họa (GUI) để có hiệu suất tốt nhất.

Apidog xử lý các bộ sưu tập lớn như thế nào so với SoapUI?Apidog lưu trữ các bộ sưu tập trên đám mây và tải chúng theo yêu cầu. Không có tệp XML cục bộ nào cần phân tích cú pháp. Việc thực thi kiểm thử sử dụng một trình chạy CLI cục bộ không yêu cầu khởi tạo JVM.

Hầu hết các vấn đề về hiệu suất của SoapUI đều có cách khắc phục. Riêng việc thay đổi kích thước heap thường mang lại hiệu quả rõ rệt ngay lập tức. Hãy bắt đầu từ đó trước khi thử các giải pháp phức tạp hơn.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API