Bagaimana cara membatasi perintah di jendela terminal?

8

Saya perlu menjalankan convertdengan banyak gambar pada saat yang sama. Perintah itu memakan waktu cukup lama tetapi ini tidak mengganggu saya.

Masalahnya adalah bahwa perintah ini membuat komputer saya tidak dapat digunakan saat perintah sedang berjalan (sekitar 15 menit).

Jadi mungkinkah untuk membatasi perintah dengan membatasi sumber daya (prosesor dan memori) ke perintah, langsung dari baris perintah? Ini hanya dapat berfungsi jika saya menambahkan sesuatu ke baris yang sama sebelum menekan Enterkarena begitu saya memulai proses komputer melambat sehingga tidak mungkin misalnya untuk beralih ke "System monitor" dan mengurangi prioritas.

Edit: hasil atas dan iotop

Saya berhasil menjalankan topdan sudo iotop >iotop.txtsaat melakukan salah satu dari operasi konversi ini. (File iotop.txt yang dihasilkan sulit dibaca)

Hasil dari atas:

   PID PENGGUNA PR NI VIRT RES SHR S% CPU% MEM TIME + PERINTAH           
14275 nama pengguna 20 0 4043m 3.0g 1448 D 7.0 80.4 0: 16.45 dikonversi 

Hasil iotop:

[? 1049j [1; 24r (B [m [4l [? 7j [? 1j = [39; 49m [? 25l [39; 49m (B [m [H [2Jumlah DISK BACA BACA: 1269,04 K / s | Total DISK WRITE] : [59G0,00 B / s
(B [0; 7m TUNGGU PRI PENGGUNA DISK BACA DISK MENULIS SWAPIN (B [0; 1; 7m IO> (B [0; 7m PERINTAH [3; 2H (B [m2516 menjadi / 4 nama pengguna 350.08 K / s 0,00 B / s 0,00 B / s 0,00% 0,00% zeitgeist-datahub
 7394 menjadi / 4 nama pengguna 568,88 K / s 0,00 B / s 77,41% 0,00% --rendere ~ .530483991 [5; 1H14275 nama pengguna menganggur 350,08 K / s 0,00 B / s 37,49% 0,00% konversi S ~ f test.pdf [6 ; 2H2048 menjadi / 4 root [6; 24H0.00 B / s 0,00 B / s 0,00% 0,00% [pekerja / 3: 2]
[5G1 menjadi / 4 root [7; 24H0.00 B / s 0,00 B / s 0,00% 0,00% init

Lebih lanjut, bahkan setelah proses berakhir, komputer tidak kembali ke kinerja sebelumnya. Saya menemukan jalan keluar dengan menjalankan sudo swapoff -adiikuti olehsudo swapon -a

Melakukan
sumber

Jawaban:

5

Oh, nak, saya baru saja menangkap ini ... mengutip OP:

Lebih lanjut, bahkan setelah proses berakhir, komputer tidak kembali ke kinerja sebelumnya. Saya menemukan jalan keluar dengan menjalankan sudo swapoff -adiikuti olehsudo swapon -a

OK, jadi itu berarti Anda melelahkan RAM yang tersedia di sistem Anda, yang berarti Anda hanya mencoba menjalankan terlalu banyak convertproses sekaligus. Kami perlu melihat sintaks Anda yang sebenarnya dalam pemijahan convertuntuk memberi saran, tetapi pada dasarnya, Anda perlu memastikan Anda tidak mencoba untuk membuka proses yang lebih simultan daripada Anda memiliki RAM untuk menangani dengan nyaman.

Karena Anda menyatakan apa penyebabnya convert *.tif blah.pdf, apa yang terjadi adalah bahwa konten setiap TIF dan konversinya ke PDF dimasukkan ke dalam RAM sekaligus. Yang perlu Anda lakukan adalah membagi pekerjaan sehingga ini tidak perlu. Satu kemungkinan yang muncul di pikiran adalah melakukan sesuatu seperti find . -iname '*.tif' | xargs -I% convert % %.pdf, kemudian menggunakan pdftkatau sesuatu seperti itu untuk merekatkan semua pdf individu. Jika Anda benar - benar ingin menjadi mewah, dan Anda memiliki CPU multicore, ini juga memberi Anda kesempatan untuk menulis skrip kecil untuk menjalankan konversi dalam batch n , di mana n adalah jumlah inti Anda, dan menyelesaikan semuanya secara signifikan lebih cepat . :)

pdftk how-to: http://ubuntuhowtos.com/howtos/merge_pdf_files (pada dasarnya bermuara pada sudo apt-get install pdftk; pdftk *.pdf cat output merged.pdf)

Jim Salter
sumber
Saya hanya menjalankan SATU convert *.tif bla.pdfproses pada satu waktu, tetapi inputnya adalah sejumlah besar gambar. Ini adalah cara untuk menghasilkan satu pdf dari banyak gambar yang berfungsi dengan baik tetapi melumpuhkan pc saya.
To Do
^^ lihat jawaban yang diedit tolong :)
Jim Salter
Ini bekerja dengan sempurna dengan satu modifikasi sederhana. find . -iname '*.tif' | xargs -I% convert % %.pdfbukannya find . -iname '*.pdf' | xargs -I% convert % %.pdf. Itu juga lebih cepat! Terima kasih.
Untuk Dilakukan
Maaf, kerusakan antara otak dan jari :-)
Jim Salter
Satu modifikasi kecil ... Ini adalah hal yang baik untuk mengetahui tentang -execdan -execdiropsi untuk find. Dalam kasus Anda, daripada menggunakan xargs, saya akan menggunakan:find -iname '*.tif' -execdir convert {} {}.pdf ';'
Paddy Landau
12

man nice, Dan jika Anda membutuhkan I / O throttling man ionice.

Mari kita lihat beberapa contoh sederhana.

Penggunaan CPU pelambatan:

you@box:/$ nice -n 10 /usr/bin/convert blah.gif blah.jpg

Dari uraian Anda, bagaimanapun, penggunaan CPU hampir pasti bukan masalah Anda yang sebenarnya di sini. Kemungkinan besar, Anda mengalami pertengkaran I / O yang parah.

Penggunaan Disk Throttling:

you@box:/$ ionice -c2 -n7 /usr/bin/convert blah.gif blah.jpg

-c2adalah "upaya terbaik", dan -n7merupakan prioritas "upaya terbaik" terendah. Jadi, ini akan mempercepat pekerjaan untuk menurunkan prioritas I / O daripada kebanyakan hal lain pada sistem.

you@box:/$ ionice -c3 /usr/bin/convert blah.gif blah.jpg

-c3(tidak diperlukan tingkat prioritas) berarti "Hanya menganggur". Pekerjaan yang DILAKUKAN untuk -c3HANYA mengambil waktu penjadwalan disk yang menganggur, untuk hampir tidak berdampak sama sekali pada sistem - tetapi berpotensi waktu eksekusi yang jauh lebih lama untuk pekerjaan Anda, tergantung pada seberapa sibuknya sisa sistem.

Jim Salter
sumber
Bagaimana saya mengintegrasikan nicedalam perintah convert? Jika saya tidak salah, kerja bagus untuk proses yang sudah berjalan.
To Do
1
Lihat di atas ... Juga, srsly, baca halaman manual. Ini halaman manual yang sangat mudah, tidak kenyal sama sekali. :-)
Jim Salter
Saya mencobanya. Agak membantu tetapi tidak cukup. Saya akan coba nice -n 20lain kali.
To Do
Jujur saya tidak terlalu yakin bahwa beban CPU adalah masalah Anda di sini. Sudahkah Anda mencoba melakukan iotopsementara menjalankan proses? Biasanya satu proses memakan banyak CPU akan memiliki efek yang sangat kecil pada kegunaan sistem, tetapi proses meronta-ronta hard drive dapat SANGAT cepat membawa semuanya berhenti melengking - terutama jika Anda menggunakan drive konvensional, bukan SSD.
Jim Salter
Karena seluruh sistem berjalan sangat tidak dapat digunakan untuk Anda, Anda dapat mencoba sesuatu di sepanjang baris convert blah.gif blah.jpg & iotopsehingga iotopakan langsung menyala segera setelah Anda memulai convertpekerjaan Anda .
Jim Salter
2

Berikut ini adalah artikel yang cukup bagus tentang penggunaan program yang dipanggil cpulimituntuk membatasi penggunaan CPU dari proses apa pun:

http://maketecheasier.com/limit-cpu-usage-of-any-process-in-linux/2010/09/22

Masalahnya seperti Anda mengatakan menemukan PID dari convertproses setelah itu dimulai.

Setelah memulai convertjika Anda masih bisa mengetik perintah di terminal Anda dapat menjalankan ps aux | grep convertuntuk menemukan itu PID, kemudian sudo cpulimit -p PID -l CPU%mulai pelambatan.

Atau jika memulai convertjuga mengunci terminal Anda, artikel menunjukkan kepada Anda bagaimana Anda dapat menjalankan cpulimitsebagai daemon latar belakang yang secara otomatis akan memantau dan membatasi setiap proses selama jumlah penggunaan CPU tertentu. Semoga berhasil!

halus-texan
sumber
Skrip ini adalah ide yang buruk, dan primitif dibandingkan dengan niceperintah bawaan. cpulimitakan membatasi proses untuk penggunaan CPU tertentu% atau tidak hal lain membutuhkan waktu CPU; nice, sebaliknya, menetapkan tingkat prioritas (40 total!) yang memungkinkan penentuan prioritas satu tugas di atas (atau di bawah) tugas lainnya.
Jim Salter