จะหา cgroup ของกระบวนการเฉพาะได้อย่างไร


18

มีวิธีใดบ้างที่จะได้รับcgroupกระบวนการ?

แพคเกจเดียวที่ฉันรู้ ( cgroup-bin) เพียงแค่ให้การจัดการบางอย่างกับ cgroup และอนุญาตให้เปลี่ยน cgroup ของกระบวนการ / รายการกระบวนการ แต่ไม่มีความสามารถในการรู้ข้อมูลเกี่ยวกับ cgroup ของกระบวนการเฉพาะ


10
ลองps -o cgroup <pid>
Matthew Ife

5
cat / proc / <pid> / cgroup
c4f4t0r

@ ฉันใช่คุณพูดถูกมากมาก นี่คือสิ่งที่ฉันต้องการ
zerospiel

@ c4f4t0r วิธีการของคุณไม่ดีมันแค่เอาท์พุทให้ฉันทุกตัวควบคุมที่มีอยู่ แต่ไม่ใช่ cgroup ของกระบวนการ แต่คุณเช่นกัน
zerospiel

@MIfe นั่นเป็นความจริงขอโทษตัวเลือกอื่นคือ grep ในไฟล์งานตัวอย่างเช่น grep <pid> / cgroup / cpuset / app1 / งาน
c4f4t0r

คำตอบ:


16

ใช้ systemd (PID 3378 เป็นต้น):

# systemctl status 3378 | grep CGroup
CGroup: /user.slice/user-1000.slice/session-3.scope

ใช้ proc:

# cat /proc/3378/cgroup 
10:memory:/user.slice/user-1000.slice
9:blkio:/user.slice/user-1000.slice
8:net_cls,net_prio:/
7:cpu,cpuacct:/user.slice/user-1000.slice
6:perf_event:/
5:freezer:/
4:cpuset:/
3:pids:/user.slice/user-1000.slice
2:devices:/user.slice/user-1000.slice
1:name=systemd:/user.slice/user-1000.slice/session-3.scope

กำลังมองหา / sys /:

# cd /sys/fs/ && find * -name "*.procs" -exec grep 3378 {} /dev/null \; 2> /dev/null
cgroup/memory/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/blkio/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/net_cls,net_prio/cgroup.procs:3378
cgroup/cpu,cpuacct/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/perf_event/cgroup.procs:3378
cgroup/freezer/cgroup.procs:3378
cgroup/cpuset/cgroup.procs:3378
cgroup/pids/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/devices/user.slice/user-1000.slice/cgroup.procs:3378
cgroup/systemd/user.slice/user-1000.slice/session-3.scope/cgroup.procs:3378

คำสั่งสุดท้ายจะตรงกับข้อมูลที่ดีเกี่ยวกับกระบวนการที่มี pid เป็น13378หรือ23378หรือ33378ฯลฯ
แพทริค Mevzek

8

วิธีที่เร็วที่สุดในการดู cgroup ของกระบวนการคือโดยชื่อกระบวนการโดยใช้สคริปต์ทุบตีนี้:

#!/bin/bash
THISPID=`ps -eo pid,comm | grep $1 | awk '{print $1}'`
cat /proc/$THISPID/cgroup

4
ใช้pgrepไม่ใช่ps | grep | awk
Patrick

4

จาก RHEL7 ขึ้นไปและอื่น ๆ ของ distro ฉันพบว่าประโยชน์นี้:

$ systemd-cgtop

ก่อนที่จะใช้มันให้แน่ใจว่าคุณมีในDefaultCPUAccounting=yes/etc/systemd/system.conf

ฉันยังปรับปรุงสคริปต์ของ Egbert ที่ยังมีประโยชน์และใช้คำแนะนำของ Patrick ในการใช้pgrep:

#!/bin/bash
echo "PID  SLICE   SERVICE"
for THISPID in `pgrep $1`; do
  SLICE=$(cat /proc/$THISPID/cgroup | grep '^1:' | awk -F/ '{ print $2 }')
  SERVICE=$(cat /proc/$THISPID/cgroup | grep '^1:' | awk -F/ '{ print $3 }')
  echo "$THISPID $SLICE $SERVICE"
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.