tl;dr
cat /sys/fs/cgroup/memory$(cat /proc/self/cgroup | grep memory | cut -d: -f3)/memory.limit_in_bytes
или
cat $(mount | grep cgroup | grep memory | cut -d' ' -f3)$(cat /proc/self/cgroup | grep memory | cut -d: -f3)/memory.limit_in_bytes
Если ваша стандартная конфигурация контейнера позволяет получать информацию о cgroup хоста из контейнера (на основе настройки lxc.mount. auto), вы можете просто разобрать информацию о cgroup, как показано ниже
Проверьте информацию о вашей cgroup из /proc/self/cgroup
root@my-firefox:/# grep memory /proc/self/cgroup
4:memory:/cv/my-firefox
Теперь, основываясь на точке монтирования вашей cgroup (можно найти ее из /proc/mounts), проверьте содержимое файла ограничения памяти
root@my-firefox:/# cd /sys/fs/cgroup/memory/cv/my-firefox/
root@my-firefox:/sys/fs/cgroup/memory/cv/my-firefox# cat memory.limit_in_bytes
268435456
В моем случае выше, корень cgroup был смонтирован в /sys/fs/cgroup
, так что с этой информацией и добавлением пути /memory/cv/my-firefox
, я мог запросить все ограничения памяти, установленные для контейнера
В данном случае ограничение составляет 256M
PS: free и ansible_memtototal_mb основаны на хосте и не учитывают контейнеры. Я не знаком с ansible, но предполагаю, что в ней есть что-то похожее на facts в puppet, где можно написать пользовательский факт для сбора этой информации
.Когда вы включаете/отключаете интерфейс, вы просто устанавливаете флаг в драйвере, указывающий, что интерфейс включен или выключен. Сетевая карта все еще включена и может участвовать в WOL (Wake on LAN )и т. д.
Если вы посмотрите на вывод интерфейса, здесь показан флаг состояния:
$ ip a l eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:72:14:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe72:1426/64 scope link
valid_lft forever preferred_lft forever
state UP
Если бы я сказал ip
перевести его в нерабочее состояние:
$ ip l set eth1 down
$ ip a l eth1
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 08:00:27:72:14:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.101/24 brd 192.168.56.255 scope global eth1
valid_lft forever preferred_lft forever
Просто. Используйте ethtool
для дальнейшего опроса NIC.
$ ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown (auto)
Supports Wake-on: umbg
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: no
Ключевой частью этого вывода является Link detected: no
. Это потому, что он находится в состоянии DOWN. Если мы вернем его:
$ ethtool eth1 | grep Link
Link detected: yes
В этом случае Link detected: yes
означает, что сетевая карта включена и может обнаружить подключенный к ней кабель Ethernet.
Обратите внимание, что я использую сокращенные обозначения для команд:
a
==addr
l
==list
Есть и другие... Команда ip
«достаточно умна», чтобы выяснить, какую команду или подкоманду -вы используете, и сделать вывод об этом.