Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Добрый день всем!
Кто знает особенности применения этой недокументированной функции, как получения списка локальных переменных чужого процесса, так и их значений?
Судя по всему, как она непредсказуемо работала в старых версиях, так и продолжает в том же духе в последних версиях...
24 май 16, 11:38    [19211231]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2676
Никогда не было необходимости лезть в чужой процесс, да и не понимаю для чего это может быть нужно
можете рассказать как вы это используете ?

а вы сами пользуетесь этой zu напрямую, или используете код ISC для этого, я нашел как минимум 2 места которых может быть вполне достаточно, без необходимости использовать zu напрямую, это запросы
%SYS.ProcessQuery - VariableByJobNumber
%Studio.Global - LocalList
24 май 16, 12:03    [19211399]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB,

Не используйте недокументированные функции в новых версиях, когда есть документированные %SYSTEM.Memory.VariableStats(), %SYS.ProcessQuery.VariableByJobNumber, исходники которых прилагаются.
В них можете посмотреть как правильно использовать $zu(88) в том числе для старых версий.
24 май 16, 12:05    [19211408]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Да мне как раз нужно использование $z(88,...) в старых версиях, где нету доступа к переменным чужого процесса через объектные методы. Но дело даже не в том. Как Вы обратили внимание, даже использование этой функции в классах от разработчика продукта, имеет место довольно таки странное ...ммм. Читаем переменную один раз, и если равно пусто, то читаем второй раз с манюсенькой задержкой, а почему не три раза..? Все работы с $zu(88,...) обрамляются обработчиками ошибок, так как не обрамляются использование других $ZU(...) функций... Даже где-то в их комментариях прочитал, чтобы исключить случайную ложную ошибку...
А уже то, что в некоторых случаях эти функции могут о-очень долго возвращать результат... или возвращать пустое значение переменной, когда на самом деле там уже определена переменная... Или возвращает ошибку что нету процесса, а он на самом деле есть...
...да-а-а.
А функция то хорошая.

А для чего это нужно, ну это уже третий вопрос - мне вот нужно. Кому-то 300 лет это не нужно.
24 май 16, 12:35    [19211669]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2676
AlexKB
А для чего это нужно, ну это уже третий вопрос - мне вот нужно
В этом то ваша и проблема, так как это практически никому не нужно, поэтому и нет никаких оптимизаций в этом плане.
поэтому вам прямая дорога в WRC, и там просите чтобы это заработало лучше. Ах-да, у вас же поддержка старых версий, что тогда вам это даст ?

а может вы все таки расскажете как вы это используете ? если это очень большая история, это тоже будет интересно почитать
24 май 16, 12:40    [19211706]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Думаю, Вы ошибаетесь, это не только меня касается.
В портале управления есть функционал - посмотреть переменные выбранного процесса. Этот функционал общедоступен, но базируется он как раз на этих самых функциях. А значит работать должен стабильно, безупречно, или должен быть закрытым от общего пользования. Используя такой функционал я хочу получить список локальных переменных выбранного процесса и их значения, но увы, доступ к переменным некоторых процессов затягивается на многие десятки секунд, а то и на минуты... И все это благодаря неустойчивому механизму работы функции $zu(88,...).

Так что это не только моя проблема...

А зачем это мне нужно - после обеда напишу.
24 май 16, 12:48    [19211775]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2676
AlexKB
А значит работать должен стабильно, безупречно
Значит нужно точно написать в WRC, чтобы они все пофиксили
24 май 16, 12:54    [19211814]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
DAiMor, В моем случае это уже поздно, поскольку версия Каше еще 4-ка, так что никто ничем уже не поможет...
А вот то, что в новых версиях похожие проблемы(если это можно назвать проблемой а не особенностью) все-таки остались, немножко помрачает настроение...
24 май 16, 13:31    [19212046]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB
Да мне как раз нужно использование $z(88,...) в старых версиях, где нету доступа к переменным чужого процесса через объектные методы.
Сделайте свои объектные методы, если конечно позволяет API у старых DLL.
AlexKB
Как Вы обратили внимание, даже использование этой функции в классах от разработчика продукта, имеет место довольно таки странное ...ммм. Читаем переменную один раз, и если равно пусто, то читаем второй раз с манюсенькой задержкой, а почему не три раза..?
Вы наверное смотрели VariableByJobNumber, где логика завязана на множестве входных данных.
Посмотрите VariableStats: компактный код, чтение один раз и никаких доп.задержек (по крайней мере в 2016.3).
AlexKB
В портале управления есть функционал - посмотреть переменные выбранного процесса. Этот функционал общедоступен, но базируется он как раз на этих самых функциях. А значит работать должен стабильно, безупречно, или должен быть закрытым от общего пользования.
Не замечал проблем: показывает быстро и стабильно.
Вы при подключении используете SSL/TLS? Так как были задержки с отображением именно при SSL. Но это было давно, ещё в 2009. С тех пор исправили.
^JOBEXAM тоже тормозит и глючит?
AlexKB
А вот то, что в новых версиях похожие проблемы(если это можно назвать проблемой а не особенностью) все-таки остались, немножко помрачает настроение...
И Вы конечно же уже писали в WRC и Вам там что-то ответили. Что именно Вам ответили?
24 май 16, 13:46    [19212178]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
servit,
У меня нет возможности посмотреть на версии иной, чем 2015.1, в данный момент. Не спорю, может в новой все уже улучшено, при случае посмотрю.
Тут все зависит от инспектируемого процесса и в каком он находится состоянии.
А Вы попробуйте посмотреть переменные у процесса, который является конкурирующим TCP сервером и в данный момент ждет входящего соединения. для отображения 3-5 переменных проходит секунд 20... А вот другие процессы отображают список переменных быстро, даже довольно таки большой список. Такие же задержки происходят и при сканировании локальных переменных процесса, который находится на ожидании блокировки, да и еще в каких-то случаях...
В WRC я не писал - функция не документирована и они вправе не отвечать на мой вопрос.
Вот попробовал Ensemble 2016.2 то же самое - задержки.

Нет, проблема, или особенность остается прежней!!!
24 май 16, 14:11    [19212401]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Ensemble 2016.2 --- 50 сек для отображения 4 переменных
грустно, девицы - говорил О.Бендер.

Похоже, что это все-таки некая особенность, разработчики просто не могли бы этого не заметить...
24 май 16, 14:20    [19212470]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
eduard93
Member

Откуда:
Сообщений: 170
AlexKB
Ensemble 2016.2 --- 50 сек для отображения 4 переменных

AlexKB, возможно представить минимальный код TCP сервера/чего угодно требующего подобного времени на отображение?
24 май 16, 14:35    [19212599]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB
В WRC я не писал - функция не документирована и они вправе не отвечать на мой вопрос.
Недокументирована $zu(88), про неё писать и не нужно.
Достаточно указать воспроизводимый пример с Порталом.
Поскольку не писали в WRC, постольку и не будет исправлено.
24 май 16, 14:35    [19212604]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
eduard93,
найдите в портале процесс с параметрами устройство-|TCP|1972-или другое область-%SYS программа-%SYS.SERVER, посмотрите список переменных этого процесса. код от разработчика. смотрите, засекайте время, делайте выводы.
24 май 16, 14:46    [19212706]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
servit, я почему-то склонен думать, что разработчики знают об этом. Слишком уж очевидно. Также анализ кода от разработчика, в данном контексте, наводит меня на мысль, что они знают об этом. Поэтому я склонен считать, что это все таки особенность.
А жаль...
24 май 16, 14:49    [19212749]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Ну так что, неужто ни у кого не проявилось нечто подобное? Я эту картину наблюдаю примерно с 2000 года...
Пока без изменений...
24 май 16, 15:08    [19212921]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB
Я эту картину наблюдаю примерно с 2000 года...
Картину Вы наблюдаете, но не потрудились до сих пор сообщить в WRC. Зачем же тогда писать сюда?
AlexKB
я почему-то склонен думать, что разработчики знают об этом. Слишком уж очевидно.
Нет, не знают, потому что используют английский.
AlexKB
найдите в портале процесс с параметрами устройство-|TCP|1972-или другое область-%SYS программа-%SYS.SERVER, посмотрите список переменных этого процесса
It's impossible!
Попробуйте в Портале поменять "Предпочтительный язык для этой сессии" на английский и повторить попытку. Ничего не замечаете?

PS: в WRC уже написал (если гора не идёт к ...).
24 май 16, 15:34    [19213099]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
servit,
Разработчики знали об этом даже тогда, когда портала не было. Это было очевидно по их коду использующему функцию $zu(88,...).
Достаточно поработать в терминале.
А переключение языка всего лишь вскрывает очередную недоработку (для русского языка).
А писал я сюда, с надеждой узнать - использует ли кто данную функцию, если использует, то каким образом учитывает ее особенности (помимо того, как их учитывает разработчик), было бы очень интересно узнать...
Похоже, что не использует ее подавляющее большинство...Вот разве что А.Маслов..?
24 май 16, 15:52    [19213243]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
AlexKB
А писал я сюда, с надеждой узнать - использует ли кто данную функцию, если использует, то каким образом учитывает ее особенности (помимо того, как их учитывает разработчик), было бы очень интересно узнать...
Похоже, что не использует ее подавляющее большинство...
А Вы на DC напишите: там аудитория побольше.
24 май 16, 16:47    [19213658]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
AlexKB
Похоже, что не использует ее подавляющее большинство...Вот разве что А.Маслов..?
Угадал. Ситуации есть, когда это надо. Например, выводится список процессов пользователей, и необходимо показать их имена, которые хранятся (surprise!) в переменных процессов. Но я давно подменил её прямое использование вызовом следующего метода (публикую несколько упрощая):
ClassMethod ZU(fnum 88fmod 2pid ""var "quser"As %String
{
    
quit:(fnum=88)&&(fmod=2) $$zu88()

zu88()
#IF $$$CacheVersion>2010
  
  
ex,rset,col,columns,str str=""
  
try {
    
if '$System.Security.Check("%DB_CACHESYS","W") && '$System.Security.Check("%Admin_Manage","USE"{
        
ex=##class(%Exception.StatusException).%New()
        
ex.Name="<Not Priviliged>"ex.Location=""ex.Data=$username
        throw 
ex
    
}
    
rset=##class(%ResultSet).%New("%SYS.ProcessQuery:VariableByPid")
    
if '$isobject(rset$$$ThrowOnError($$$ERROR(5001,"No ResultSet"))
    
$$$ThrowOnError(rset.Execute(pid,var,1))
    
if rset.Next() 
        
str=rset.Data("Value")
        
s:($e(str)="""")&($e(str,*)=""""str=$e(str,2,*-1)
        
s:str="<UNDEFINED>" str=""
    
}
  } 
catch ex {
    
if ex.Name'="" 
        
if $isvalidnum(ex.Namestr=$system.Status.GetErrorText(ex.AsStatus()) }
        
else str=ex.Name_ex.Location_" *"_ex.Data }
       } 
else {
        
str=$system.Status.GetErrorText(ex.AsStatus())
    
}
  }
  
if $isobject($g(rset)) rset.Close()
  
str
  
#ELSE

  q $zu
(fnum,fmod,pid,var)
  
#ENDIF
}
Работоспособность проверена в Cache 2010.1-2015.1.
Как видно по коду, "танцы с бубном" возникли именно в связи с развитием модели безопасности Cache; не припомню проблем в старых версиях.
24 май 16, 16:56    [19213713]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
Alexey Maslov,
Хоть кто-то использует подобное...
Дело в том, что я хотел быстрым образом автоматически сканировать фоновые процессы и по значениям локальных переменных процессов судить об их активности, интенсивности, других моментах их текущего рабочего состояния. При этом я мог бы делать определенные выводы, давать указания процессам на снижение своей активности, приостанавливать и возобновлять их работу, давать указания на прекращение их работы (мягкое, самостоятельное прекращение), запускать аналогичные процессы и многое другое.
Но увы, нестабильная работа функции $zu(88,...) не позволяет мне этого делать, задержки в несколько десятков секунд для получения значения нескольких переменных, а иногда и возврат пустых значений этих переменных (когда я точно знаю, что там есть значения), не говоря уже о других приколах работы функции, не позволяет мне пользоваться таким приемом.
...такова печалька...
25 май 16, 09:03    [19215818]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
MX-9
Member

Откуда: LIBAVA
Сообщений: 403
AlexKB,
а заставить процессы мониторить в глобаль ежеминутно.
(пусть сами про себя пишут)
25 май 16, 10:47    [19216447]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1554
AlexKB,

по идее, задержки при опросе процесса не должны превышать длительности кванта ОС. У нас данная функция используется относительно редко, негативных отзывов пока не было.

А следить за производительностью процессов, пожалуй, лучше/проще, используя те же метрики, что и ^PERFMON.
25 май 16, 10:48    [19216457]     Ответить | Цитировать Сообщить модератору
 Re: Недокументированная $zu(88,...)  [new]
AlexKB
Member

Откуда: Запорожье
Сообщений: 818
А мне как раз нужно было интенсивное использование $zu(88,...)
Понятное дело, что я буду теперь искать другие способы, благо в Каше есть запас на этот случай.
Жалко, что такая хорошая функция и так неустойчиво работает, может поэтому она так и осталась в разряде недокументированных для внутреннего использования разработчиками продукта...

На этом собственно и все на этот счет...
Всем спасибо!
25 май 16, 11:01    [19216532]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить