Berapa banyak core yang saya gunakan di Server Linux?

30

Saya hanya ingin tahu bagaimana saya bisa mencari tahu di bash berapa banyak core CPU yang sekarang digunakan pengguna di Linux Server?

Saya mengirimkan cukup banyak pekerjaan latar belakang ke server, jadi saya ingin menulis skrip bash untuk memeriksa sebelum saya mengirimkan pekerjaan jika pekerjaan yang sedang berjalan (proses) yang saya kirimkan terlalu banyak, karena saya harus membiarkan yang lain pengguna memiliki cukup inti untuk digunakan untuk pekerjaan mereka. Saya ingin tahu perintah bash apa yang bisa memberi tahu saya berapa core yang digunakan oleh pekerjaan saya sekarang.

Terima kasih dan salam!

Tim
sumber

Jawaban:

39

Untuk mendapatkan jumlah inti CPU per CPU:

grep "^core id" /proc/cpuinfo | sort -u | wc -l

Atau untuk mendapatkan jumlah CPU fisik :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l
Alix Axel
sumber
bagaimana cara memeriksa ini untuk pengguna yang diberikan?
makis
26

Saya tidak tahu apakah itu membantu, tetapi Anda dapat menggunakan mpstatutilitas untuk mendapatkan gangguan penggunaan CPU oleh prosesor individu (atau inti). Sebagai contoh:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

Dalam contoh ini, Anda dapat melihat bahwa CPU 0, 1dan 6melakukan lebih banyak pekerjaan daripada sisa dari mereka. Kadang-kadang Anda akan melihat bahwa satu CPU dekat (atau pada) 100% sementara yang lain nol. Ini bisa menjadi indikator program (atau bagian dari program) yang single-threaded dan hanya dapat menggunakan CPU tunggal pada suatu waktu.

Untuk menginstal mpstatpada sistem Fedora, RHEL, atau CentOS, gunakan yum install sysstat.

Matt Solnit
sumber
Terima kasih banyak untuk memberikan jawaban ini! Rekan-rekan saya menggunakan perintah "atas" dan membuat kesimpulan yang salah tentang pemanfaatan prosesor sampai saya menunjukkan kepada mereka perintah mpstat.
Nav
Tidak tersedia di Ubuntu: # aptitude search mpstat #.
Alix Axel
2
@AlixAxel coba aptitude search systatsaja.
Matt Solnit
@MattSolnit: Masih belum berhasil.
Alix Axel
mpstat disediakan oleh paket sysstat di Debian dan di Ubuntu . Saya berharap sebagian besar distribusi yang diturunkan dari Debian menggunakan nama paket yang sama. Pada distribusi yang diturunkan dari Debian, mulailah dengan apt-cache search --full mpstat.
CVn
2

Kecuali secara eksplisit dikonfigurasikan untuk tidak (mis. Menyematkan proses ke CPU tertentu), semua core dapat diasumsikan sedang digunakan setiap saat. Penjadwal akan mengalokasikan proses inti yang tersedia berikutnya. Contohnya, "System Monitor" (bagian dari GNOME) menunjukkan beban saya hampir sama di semua 4 inti mesin saya.

EmmEff
sumber
Saya mengirimkan cukup banyak pekerjaan latar belakang ke server, jadi saya ingin menulis skrip bash untuk memeriksa sebelum saya mengirimkan pekerjaan jika pekerjaan yang sedang berjalan (proses) kirimkan oleh saya terlalu banyak, karena saya harus membiarkan pengguna lain memiliki core yang cukup untuk digunakan untuk pekerjaan mereka. Jadi saya ingin tahu perintah bash apa yang bisa memberi tahu saya berapa core yang digunakan oleh pekerjaan saya sekarang.
Tim
3
Saya tidak berpikir Anda mengerti jawaban saya. Jumlah core yang digunakan SELALU jumlah total core yang tersedia. Gunakan beban sistem secara keseluruhan sebagai faktor untuk menentukan apakah pengajuan pekerjaan Anda harus dibatasi.
EmmEff
Terima kasih! Saya memeriksa keseluruhan beban sistem. Saya telah diberitahu oleh salah satu kolega saya bahwa saya tidak dapat menggunakan semua core karena siapa tahu orang lain akan segera menjalankan pekerjaan mereka dan pekerjaan saya akan berlangsung cukup lama. Apakah Anda juga berpikir saya harus membatasi inti yang saya gunakan?
Tim
2

Jadi Anda akan melihat ada tanggapan di sini yang akan memberi tahu Anda bagaimana inti Anda digunakan.

NAMUN - ini tidak benar-benar melakukan Anda layanan. Anda telah membuat asumsi dasar yang tidak berlaku - bahwa pekerjaan Anda akan cenderung untuk mengelompokkan diri menjadi beberapa bagian dari inti.

Alih-alih, pekerjaan Anda akan tersebar di seluruh inti, kecuali jika Anda menerapkan sesuatu yang membuat mereka "tetap". (Catatan: Saya tidak merekomendasikan itu; hanya mengatakan, "kecuali")

Inilah strategi alternatif: Identifikasi untuk sistem khusus Anda apa tingkat LOAD ketika Anda merasa "dapat diterima" bagi pengguna lain untuk menambahkan lebih banyak pekerjaan. Kemudian, buat sesuatu yang hanya mengirimkan pekerjaan latar belakang baru ketika level beban di bawah batas itu.

Dengan begitu, solusinya akan menjadi core-count-independent, lebih portable, lebih fleksibel, dan lebih mudah untuk "tweak" juga.

pbr
sumber
Saya baru saja memperhatikan komentar yang Anda tambahkan ke jawaban poster lain, menunjukkan ini karena sesuatu yang dikatakan rekan kerja. Jadi, memang, tampaknya kesalahpahaman itu miliknya, bukan milikmu. Maaf soal itu!
pbr
Terima kasih! Mengenai "Identifikasi untuk sistem khusus Anda apa tingkat LOAD adalah ketika Anda merasa" dapat diterima "bagi pengguna lain untuk menambahkan lebih banyak pekerjaan", jika beban saat ini tidak terutama disebabkan oleh pekerjaan saya yang sedang berjalan maka saya akan merasa lebih bebas untuk menggunakan CPU sisanya, tetapi jika dalam beban saat ini pekerjaan saya berjalan mengambil jumlah yang adil maka saya mungkin harus menyerah menggunakan CPU sisanya. Jadi apakah Anda masih berpikir saya tidak perlu memperkirakan penggunaan CPU dari total pekerjaan saya yang sedang berjalan?
Tim
Tidak, saya benar-benar berpikir tidak masuk akal untuk membedakan antara seberapa banyak beban saat ini dari pekerjaan Anda vs pekerjaan lain. Pertimbangkan kesederhanaannya: pekerjaan Anda mencoba menjadi warga negara yang baik, dan hanya menyerahkan diri jika bebannya di bawah tingkat yang Anda anggap dapat diterima. Idenya adalah TIDAK PERNAH untuk memanfaatkan semua kapasitas yang tersisa; yang membuat pengguna lain di masa depan terikat. Idealnya, semua pengguna akan menggunakan logika yang sama untuk ini.
pbr
2

Jika Anda ingin melakukan ini agar berfungsi di linux dan OS X, Anda dapat melakukannya:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
tim_yates
sumber
1

Anda bisa mendapatkan perkiraan kasar dengan menjalankan top, menekan ' U' dan menentukan nama pengguna Anda, lalu menambahkan pemanfaatan CPU dari beberapa proses teratas Anda.

dmckee
sumber
Saya suka mengetahui perintah bash yang dapat memberi tahu saya nomornya, karena saya ingin menggunakannya dalam skrip bash.
Tim
@Tim topdapat berjalan dalam mode batch dengan -b switch. Gabungkan dengan -n untuk mendapatkan jumlah iterasi yang Anda butuhkan.
nagul
1
dapatkah Anda memberikan contoh kode untuk mendapatkan jumlah inti yang digunakan oleh semua pekerjaan (proses) yang diajukan oleh pengguna?
Tim
@Tim Tidak luput. Saya harus menulis skrip seperti itu dengan mem-parsing topoutput atau google untuk melihat apakah seseorang sudah melakukannya. Namun, saya tidak yakin nilainya upaya karena saya pikir saya akan mendapatkan output yang berbeda untuk setiap proses mengingat kecepatan di mana konteks terjadi. Bukankah sistem memuat indikator yang cukup baik? Ini secara efektif memberi tahu Anda berapa banyak core virtual yang diperlukan untuk menangani proses antrian (proses menunggu pada CPU).
nagul
@ nagul: Ya, beban sistem bagus dan saya juga memeriksanya. Namun beberapa orang terus mengatakan kepada saya bahwa saya tidak dapat menggunakan semua core karena siapa tahu orang lain akan menjalankan pekerjaan mereka segera. Jadi saya kira saya harus membatasi core yang saya gunakan. Ngomong-ngomong, apakah Anda melihat skrip daring yang memeriksa beban CPU dan memori dan secara dinamis mengirimkan pekerjaan berdasarkan penggunaan? Saya sudah mencari mereka begitu lama. Terima kasih!
Tim