Câu hỏi Gradle biên dịch làm chậm máy tính của tôi


Đáp ứng thực sự là xấu trên một Ubuntu 14.04 LTS mới được cài đặt.

Dưới đây là thông số kỹ thuật của máy tính xách tay của tôi:

Quadcore Intel i7-4600U CPU @ 2.10GHz
12GB Ram
1TB Samsung EVO SSD

Và khi gradle được biên dịch, toàn bộ hệ thống của tôi chậm lại để thu thập dữ liệu, video bắt đầu nói lắp, trình duyệt di chuyển chậm ... vv

Điều tương tự cũng xảy ra khi quá trình làm mới trang xảy ra trong một cửa sổ khác trong Chrome và trong khi làm mới trang, video HTML5 trong tab khác bắt đầu nói lắp.

Làm thế nào tôi có thể sửa lỗi này?

Dưới đây là một số nhật ký:

$ vmstat -a 1 5 - http://paste.ubuntu.com/7493966/

$ iostat -x 1 5 - http://paste.ubuntu.com/7493970/

$ b đầu - http://paste.ubuntu.com/7493974/


4
2018-05-20 16:25


gốc


Bạn có thẻ video nào? Cũng có thể không dây. Bạn cũng có thể thử k / x / lubuntu. - Panther
Đó là thẻ HD4400 intel tích hợp. nó thực sự là môi trường máy tính để bàn? bởi vì nó có vẻ giống như một vấn đề lập lịch cpu. không khí macbook của tôi chậm hơn rất nhiều nhưng tôi có cách ứng dụng đáp ứng tốt hơn trên đó. - nubela
Trên thẻ intel (cũ hơn) của tôi, tôi thấy cả KDE và XFCE đều đáp ứng tốt hơn, bạn có thể khởi động usb trực tiếp và thử nó. - Panther
Bạn có thể cung cấp một số nhật ký trong khi xảy ra tình trạng chậm trễ hay không. Đặt nó trên paste.ubuntu. top -b -n 2, iostat -x 1 5, vmstat -a 1 5 - c0rp
hi @ c0rp, đã thêm nhật ký khi bạn yêu cầu. - nubela


Các câu trả lời:


Tôi không làm việc với gradle. Nhưng khi tôi hiểu nó là vấn đề phổ biến.

Đây là một liên kết:

Chủ đề rất hữu ích

Vấn đề sử dụng CPU

Hiệu suất tốt nghiệp 

Google

Những gì bạn có thể làm là thay đổi quá trình lập kế hoạch. Đối với quá trình chạy IDE hoặc gradle.

tốt đẹp

tốt đẹp là một chương trình được tìm thấy trên các hệ điều hành Unix và Unix như   như Linux. Nó trực tiếp ánh xạ tới một cuộc gọi hạt nhân cùng tên. tốt đẹp là   được sử dụng để gọi một tiện ích hoặc tập lệnh shell có mức độ ưu tiên cụ thể,   do đó cho quá trình nhiều hơn hoặc ít thời gian CPU hơn so với các quy trình khác. A   tính độc đáo của −20 là ưu tiên cao nhất và 19 hoặc 20 là mức ưu tiên thấp nhất   sự ưu tiên. Tính độc đáo mặc định cho các quá trình được kế thừa từ   quá trình cha mẹ, thường là 0.

Thay đổi tính độc đáo bạn có thể dùng renice chỉ huy

sudo renice <PID> <niceness> 

Đọc điều này để biết thêm thông tin

Đối với thời gian xây dựng, bạn có thể đặt độ đẹp cho 15-20. Sau khi xây dựng thay đổi nó thành giá trị mặc định, thường là 0.

cpulimit

cài đặt, dựng lên cpulimit. sudo apt-get install cpulimit

-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.

Để hạn chế sử dụng CPU của quá trình được gọi là firefox đến 30%, hãy nhập:

# cpulimit -e firefox -l 30

Để hạn chế sử dụng CPU của quá trình đến 30% bằng cách sử dụng PID của nó, hãy nhập:

# cpulimit -p 1313 -l 30

cpulimit nên chạy ít nhất với cùng một người dùng đang chạy kiểm soát   quá trình. Nhưng nó tốt hơn nhiều nếu bạn chạy cpulimit như root, theo thứ tự   để có mức độ ưu tiên cao hơn và kiểm soát chính xác hơn.

Nếu máy của bạn có một bộ xử lý, bạn có thể giới hạn tỷ lệ phần trăm từ 0%   đến 100%, có nghĩa là nếu bạn đặt 50% ví dụ, quy trình của bạn   không thể sử dụng hơn 500 ms thời gian cpu cho mỗi giây. Nhưng nếu bạn   máy có bốn bộ xử lý, tỷ lệ phần trăm có thể thay đổi từ 0% đến 400%, vì vậy   đặt giới hạn thành 200% có nghĩa là sử dụng không quá một nửa số   sức mạnh có sẵn. Trong mọi trường hợp, tỷ lệ phần trăm giống với những gì bạn   xem khi nào bạn chạy trên cùng.

Sử dụng Cpulimit

Cách giới hạn mức sử dụng CPU

chrt

Bạn cũng có thể thay đổi quá trình lên lịch hoặc PID.

SCHED_FIFO
Scheduling policy designed for special time-critical applications. It uses the First In-First Out scheduling algorithm.

SCHED_BATCH
Scheduling policy designed for CPU-intensive tasks.

SCHED_IDLE
Scheduling policy intended for very low prioritized tasks.

SCHED_OTHER
Default Linux time-sharing scheduling policy used by the majority of processes.

SCHED_RR
Similar to SCHED_FIFO, but uses the Round Robin scheduling algorithm.

Hầu hết nếu quá trình trong Ubuntu là SCHED_OTHER

Tìm các giá trị ưu tiên cho chính sách lên lịch

$ chrt -m
SCHED_OTHER min/max priority    : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority   : 1/99
SCHED_BATCH min/max priority    : 0/0
SCHED_IDLE min/max priority : 0/0

Đặt SCHED_IDLE để xử lý

$ chrt -i -p 0 PID

hoặc bạn có thể thay đổi ưu tiên SCHED_OTHER

$ chrt -o -p 1 PID

Làm thế nào để

Cách khác

Ngoài ra bạn có thể thử giảm số lượng Thread cho gradle. Bạn có thể đọc về nó ở đây. Như tôi thấy nó có các tùy chọn này:

./gradlew -PtaskThreads=2

Ngoài ra, bạn có thể thử giảm mức sử dụng bộ nhớ:

GRADLE_OPTS=-Mmx512m

Trích dẫn từ Chủ đề rất hữu ích

--parallel-threads only applies to project parallelization.

For android tasks that are running in parallel, we always create as many threads as possible. For slower machine (or with low ram) this is not great. We should allow control on that.

Possible though:
./gradlew assemble -PandroidThread=3

Studio would have to allow configuring and sending this (it should also let you configure --parallel-threads if it doesn't already).

Long term gradle will have a thread pool shared across all level of parallelization (multi-projects. inside a project, inside a task) so this will become obsolete but it would be good to do now.

4
2018-05-21 18:20