Renderer to Image node fails in server execution

When I execute a workflow containing ‘Renderer to Image’ node on KNIME server, it fails with the below message. It runs fine when executed locally. Any idea what is wrong?

Renderer to Image 0:2 - ERROR: Execute failed: No more handles [gtk_init_check() failed]

Hi Ravikiran,

It looks like that is an issue with the number of open file handles on a linux server. You can check those limits, and raise them by following the instructions (Ubuntu) here: https://underyx.me/2015/05/18/raising-the-maximum-number-of-file-descriptors

Best,

Jon

Hi Jon,

Below is the logs for this failure. Actually DISPLAY variable is not set for this KNIME server instance. Now, do we require DISPLAY variable to be set for the KNIME server instance for the “Renderer to image” to work? If yes, should that be enough to set a headless display or do we need to start X server also running?

2019-03-15 06:38:19,534 : DEBUG : KNIME-Worker-1 : Node : Renderer to Image : 0:2 : Execute failed: No more handles [gtk_init_check() failed]
org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
at org.eclipse.swt.SWT.error(SWT.java:4559)
at org.eclipse.swt.widgets.Display.createDisplay(Display.java:955)
at org.eclipse.swt.widgets.Display.create(Display.java:942)
at org.eclipse.swt.graphics.Device.<init>(Device.java:174)
at org.eclipse.swt.widgets.Display.<init>(Display.java:566)
at org.eclipse.swt.widgets.Display.<init>(Display.java:557)
at org.eclipse.swt.widgets.Display.getDefault(Display.java:2228)
at com.schrodinger.knime.type.maestro.CanvasMaestroRenderer.paintComponent(CanvasMaestroRenderer.java:236)
at javax.swing.JComponent.paint(JComponent.java:1056)
at org.knime.base.node.renderer2image.Renderer2ImageNodeModel.createPngCell(Renderer2ImageNodeModel.java:368)
at org.knime.base.node.renderer2image.Renderer2ImageNodeModel$3.getCell(Renderer2ImageNodeModel.java:260)
at org.knime.core.data.container.SingleCellFactory.getCells(SingleCellFactory.java:105)
at org.knime.core.data.container.RearrangeColumnsTable.calcNewCellsForRow(RearrangeColumnsTable.java:505)
at org.knime.core.data.container.RearrangeColumnsTable.calcNewColsSynchronously(RearrangeColumnsTable.java:426)
at org.knime.core.data.container.RearrangeColumnsTable.create(RearrangeColumnsTable.java:344)
at org.knime.core.node.ExecutionContext.createColumnRearrangeTable(ExecutionContext.java:385)
at org.knime.base.node.renderer2image.Renderer2ImageNodeModel.execute(Renderer2ImageNodeModel.java:175)
at org.knime.core.node.NodeModel.execute(NodeModel.java:733)
at org.knime.core.node.NodeModel.executeModel(NodeModel.java:567)
at org.knime.core.node.Node.invokeFullyNodeModelExecute(Node.java:1186)
at org.knime.core.node.Node.execute(Node.java:973)
at org.knime.core.node.workflow.NativeNodeContainer.performExecuteNode(NativeNodeContainer.java:559)
at org.knime.core.node.exec.LocalNodeExecutionJob.mainExecute(LocalNodeExecutionJob.java:95)
at org.knime.core.node.workflow.NodeExecutionJob.internalRun(NodeExecutionJob.java:179)
at org.knime.core.node.workflow.NodeExecutionJob.run(NodeExecutionJob.java:110)
at org.knime.core.util.ThreadUtils$RunnableWithContextImpl.runWithContext(ThreadUtils.java:328)
at org.knime.core.util.ThreadUtils$RunnableWithContext.run(ThreadUtils.java:204)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.knime.core.util.ThreadPool$MyFuture.run(ThreadPool.java:123)
at org.knime.core.util.ThreadPool$Worker.run(ThreadPool.java:246)
2019-03-15 06:38:19,536 : DEBUG : KNIME-Worker-1 : WorkflowManager : Renderer to Image : 0:2 : Renderer to Image 0:2 doBeforePostExecution

Hi Ravikiran,

Did you get to the bottom of this issue? I’m not sure what is causing the issue, but I don’t think that it should be necessary to set a DISPLAY variable. Does a system restart help?

Best,

Jon