Do you use CSP pages or REST (through portal or other applications) ? It uses a grace period that can hold a license slot longer than the actual login time.

You can look at the license usage in the Management Portal :
- Click on View System Dashboard, in Licensing tab :

You can click on Current License Use, and click on the bottom of the page on 'Click here for more details' to go to the License Usage page (also accessible via System Operation -> License Usage)

You can view the same figures in terminal by using Do $system.License.ShowSummary()
(Look at Do $system.License.Help() for other methods to show license stats.

Hi Daniel, did you do a zwrite output ? It is an array, so if output=2 there should be more data in it.

(usually output is empty when the command was executed successfully)
I like using using OPEN because any shell output message is captured and can be logged.

do ##class(Image.Utils).Convert("a.jpg","-resize 10X10", .output)
zwrite output
output(1)="convert: UnableToOpenBlob 'a.jpg': No such file or directory @ error/blob.c/OpenBlob/3109."
output(2)="convert: MissingAnImageFilename `10X10' @ error/convert.c/ConvertImageCommand/3272."

I am using read queue to be able to monitor the output from Image like this :

Parameter INSTALLDIR = "c:\ImageMagick\";

/// Do ##class(Image.Utils).Resize(file, newFile500, "500X500", .msg)
ClassMethod Resize(fileOrig As %String, fileNew As %String, newSize As %String, ByRef output as %String) As %Boolean
  Quit ..Convert(fileOrig, "-resize "_newSize_"^> """_fileNew_"""", .output)

ClassMethod Convert(file, options, ByRef output as %String) As %Boolean
  Do ..Cmd("convert """_file_""" "_options, .output)
  Quit 1

ClassMethod Cmd(command As %String, ByRef outputStr As %String)
  Kill outputStr
  Try {
    Set cmd=..#INSTALLDIR_command
    Open cmd:("RQ")
    For {
      Use cmd Read line If $ZEOF=-1 Quit
      Set outputStr($i(outputStr))=line
catch {
  Close cmd

Hi Hansel,

Temp should only grow because of use of temporary globals. (^IRIS.temp, ^mtemp, or any other global explicitly mapped to IRISTEMP)
In my experience, sudden growth of temp is mostly due to an SQL query that is doing a join or order of non-indexed columns.
When you restart Iris, you could delete the iristemp (it will recreate it), you can also set a param to truncate it automatically at startup:

I don't see any performance disavantages in using SOAP or REST to call classmethods of other IRIS instances compared to ECP.
And SOAP/REST is available in all IRIS license types, in contrast with ECP.

When i use %SQL.Statement, and I pass sql to the %Prepare method as an array, it will start to fail  around 11,400 characters