Я запускаю несколько Linux-серверов с VMware Server 2. Когда время их отклика не такое большое или средняя нагрузка возрастает, я открываю top
чтобы узнать, что происходит, или для наших производственных серверов у меня есть top
открыт весь день. Проблема в том, что командная строка vmware-vmx
процессы действительно длинные, например:
/usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;version=2.0.2;buildnumber=203138;licensename=VMware GSX Server for Linux;licenseversion=3.0 build-203138; -@ pipe=/tmp/vmhsdaemon-0/vmxaf9a31943e9065f0;readyEvent=55 /var/lib/vmware/Virtual Machines/Kyle.vmwarevm/Kyle.vmx
Так что в top
все, что я вижу, это:
4135 root 20 0 593m 324m 289m S 21 4.2 3038:04 /usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;
4106 root 10 -10 997m 399m 346m S 9 5.1 1135:25 /usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;
4074 root 20 0 833m 110m 97m S 2 1.4 722:19.38 /usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;
В VMWare Server 1 каждая виртуальная машина будет работать как собственный пользователь, поэтому я легко могу сказать, какая из них была какой. Не так с VMWare Server 2. Можно ли вместо покупки действительно широкого монитора или установки с тройным монитором изменить командную строку этих запущенных процессов, чтобы я мог легко определить, какой из них какой? Я знаю, что процессы могут изменять командную строку сами по себе ... и я могу читать (но не писать) /proc/nnn/cmdline
...
Есть ли способ (как root) изменить командную строку запущенного процесса?
Хотя, вероятно, никто больше не собирается использовать VMWare Server, эта проблема возникнет и с другими процессами. Ты настоящий должен смотреть на htop вместо этого он позволяет при боковой прокрутке читать всю командную строку и отображает деревья процессов:
Что касается вашего вопроса, изменение командной строки процесса, который уже запущен, вероятно, будет возможно только путем перезаписи данных по адресу памяти его ARGV [0]. Насколько мне известно, еще нет инструмента, который бы changecmdline 4652 "foo process"
. Дальнейшее обсуждение: http://stupefydeveloper.blogspot.de/2008/10/linux-change-process-name.html
Это действительно досадная проблема.
Настоящее решение размещено здесь:
http://blog.angulosolido.pt/2012/01/vmware-2-long-process-names-and-top.html
Скрипт НЕ красивый, но он работает.
Как насчет следующего:
watch 'ps -eo pid,pcpu,args | grep vmware'
Часы будут запускать команду каждые 2 секунды. pcpu
процент процессора.
Короткий ответ, я не думаю, что это возможно без перекомпиляции ядра. Я проверил верх, и он определенно тянет его из / proc:
strace top -c 2>&1 | grep "proc"
open("/proc/6501/stat", O_RDONLY) = 4
open("/proc/6501/statm", O_RDONLY) = 4
open("/proc/6501/cmdline", O_RDONLY) = 4
Как вы говорите, / proc / pid / cmdline не может быть записан root. Вы не думали запускать их с помощью программы-оболочки? например. bash скрипт ./vmware, который просто выполняет
/usr/lib/vmware/bin/vmware-vmx -# product=2;name=VMware Server;version=2.0.2;buildnumber=203138;licensename=VMware GSX Server for Linux;licenseversion=3.0 build-203138; -@ pipe=/tmp/vmhsdaemon-0/vmxaf9a31943e9065f0;readyEvent=55 $1"
Стоит отметить, что верхняя часть обрезается только тогда, когда на ней нет места. Почему бы не открыть верх, нажать f и удалить все поля, которые вы не используете. Вы можете просто обнаружить, что он оставляет достаточно места для всей командной строки
Не прямой ответ на ваш вопрос, но, возможно, ответ на вашу проблему:
Это может быть легко написано сценарием, хотя у меня сейчас нет открытой консоли Linux. Упражнение оставлено читателю.
#!/bin/bash
DELAY=2
DIRNAME=virtual
while true; do
clear; ps -eo pid,pcpu,args | grep vmx|grep $DIRNAME |awk '{ print $1 " " $2 " " $NF}'| sort -rn -k 2; sleep $DELAY;
done
Попробуй это:
#!/bin/sh
A=`ps -e -o pid,cmd| grep vmware-vmx | grep -v match | awk 'BEGIN {print "{" } {gsub(/^.*\//, "", $NF); print "if (match($0, / *" $1 " /)) { sub(\"vmware-vmx \",\"" "%-20s" "\",$0); printf($0,\"" $NF "\"); print \"\";} else "} END {print "print $0 }"}'`
top | awk "$A"
Сценарий работает как фильтр для вывода TOP и заменяет vmware-vmx именем виртуальной машины. Предполагается, что файл .vmx содержит не более 20 символов. Это потому, что вам нужно сохранить размер линии, созданный с помощью top.