Hi,
I'm using Ignite 1.7.
I have a function nativeSQL that is called in many point of my programs.
But after 2/3days I receive my OOM (this function is called every 0.25ms X
10 concurrent users).
My dubmp show me
Class Name |
Objects | Shallow Heap | Retained Heap
----------------------------------------------------------------------------
------------------------------------
org.h2.engine.Session |
201.406 | 51.559.936 | >= 95.063.648
char[] |
501.160 | 40.283.480 | >= 40.283.480
java.lang.Object[] |
625.053 | 21.469.296 | >= 34.984.640
org.h2.jdbc.JdbcConnection |
201.404 | 17.723.552 | >= 43.503.144
java.util.ArrayList |
616.718 | 14.801.232 | >= 38.616.296
java.util.HashMap$Node |
470.953 | 11.302.872 | >= 16.857.176
org.h2.engine.UndoLog |
201.406 | 9.667.488 | >= 32.224.960
org.apache.ignite.internal.util.GridCircularBuffer$Item |
343.040 | 8.232.960 | >= 8.232.968
java.lang.String |
500.219 | 8.003.504 | >= 47.308.152
org.h2.util.CloseWatcher |
201.404 | 6.444.928 | >= 13.375.872
java.util.HashMap$Node[] |
9.546 | 5.074.192 | >= 19.757.480
org.h2.message.Trace |
201.411 | 4.833.864 | >= 16.033.024
byte[] |
5.104 | 1.698.496 | >= 1.698.496
org.jsr166.ConcurrentHashMap8$Node[] |
85 | 1.531.792 | >= 2.455.608
org.apache.ignite.internal.util.GridCircularBuffer$Item[] |
4.216 | 1.439.616 | >= 9.672.576
org.apache.ignite.internal.processors.jobmetrics.GridJobMetricsSnapshot|
16.384 | 1.310.720 | >= 1.310.720
org.jsr166.ConcurrentLinkedHashMap$HashEntry[] |
1.308 | 1.225.408 | >= 1.225.472
Class Name | Objects | Shallow Heap
--------------------------------------------------------------
org.h2.engine.Session | 201.406 | 51.559.936
|- org.h2.jdbc.JdbcConnection | 201.404 | 17.723.552
|- org.h2.util.CloseWatcher | 201.404 | 6.444.928
|- java.util.HashMap$Node | 201.404 | 4.833.696
|- org.h2.command.dml.Select | 65 | 11.440
|- org.h2.table.TableFilter | 65 | 6.760
|- org.h2.jdbc.JdbcPreparedStatement | 65 | 5.720
|- org.h2.index.IndexCursor | 64 | 4.608
|- org.h2.command.CommandContainer | 65 | 2.600
|- org.h2.engine.Database | 1 | 368
|- java.lang.Thread | 1 | 120
|- org.jsr166.ConcurrentHashMap8$Node| 4 | 96
|- org.h2.result.LocalResult | 1 | 72
'- Total: 12 entries | |
Class Name
| Objects | Shallow Heap
----------------------------------------------------------------------------
---------------------------------------
org.h2.jdbc.JdbcConnection
| 201.404 | 17.723.552
|- org.h2.util.CloseWatcher
| 201.404 | 6.444.928
|- java.lang.Object[]
| 1 | 960.400
|- org.h2.jdbc.JdbcPreparedStatement
| 65 | 5.720
|-
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$ConnectionWr
apper | 14 | 224
|- java.lang.Thread
| 1 | 120
|-
org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecut
or$QueryRun| 1 | 32
Class Name | Objects
| Shallow Heap
----------------------------------------------------------------------------
----------------
java.util.ArrayList | 616.718
| 14.801.232
|- org.h2.engine.Session | 201.406
| 51.559.936
|- org.h2.engine.UndoLog | 201.406
| 9.667.488
|- org.apache.felix.framework.capabilityset.SimpleFilter | 5.798
| 139.152
|- org.apache.felix.framework.wiring.BundleCapabilityImpl | 1.777
| 71.080
|- java.lang.Object[] | 46
| 19.560
|- org.apache.felix.framework.BundleRevisionImpl | 221
| 17.680
|- org.apache.felix.framework.BundleImpl | 221
| 14.144
|- java.util.HashMap$Node | 514
| 12.336
|- org.h2.command.dml.Select | 65
| 11.440
|- com.flexvalley.drivers.zway.internal.config.ZWaveDbProduct | 340
| 8.160
|- java.security.Provider$Service | 126
| 7.056
|- java.util.concurrent.ConcurrentHashMap$Node | 292
| 7.008
|- org.h2.table.TableFilter | 65
| 6.760
|- org.apache.cxf.bus.osgi.CXFExtensionBundleListener$OSGiExtension| 106
| 5.936
|- org.apache.xerces.dom.AttributeMap | 167
| 4.008
----------------------------------------------------------------------------
----------------
H2 is used only by Ignite.
This is only one function that runs QueryCursor.
@Override
public List<V> nativeSQL(final Class<?> cls, final String whereCondition,
final Object... whereParams) {
StringBuilder sqlText=new StringBuilder("select * from
").append(cls.getSimpleName()).append(" where ").append(whereCondition);
try(QueryCursor<List<?>> qryx = cache
.query(new SqlFieldsQuery(sqlText.toString())
.setArgs(whereParams))) {
List<V> list = new CopyOnWriteArrayList<>();
iteratorToStream(qryx.iterator(),true).parallel().forEach(objects -> {
list.add((V) objects.get(1));
});
//qryx.close();
return list;
} catch (Exception ex) {
logger.error("Query Error {}", ex);
}
finally {
sqlText.setLength(0);
sqlText=null;
}
return null;
}
Can you help me understand if it's my mistake please?
Best Regards
Devis Balsemin, FlexValley SRL (Italy) ,
Via Dante Alighieri 4, I-36075 Montecchio Maggiore, Italy | t:
+39.0444.699622 | f: +39.0444.1830543
Please consider your environmental responsibility before printing this
e-mail
This communication (including any attachments) may contain privileged or
confidential information of FlexValley SRL and is intended for a specific
individual. If you are not the intended recipient, you should delete this
communication, including any attachments without reading or saving them in
any manner, and you are hereby notified that any disclosure, copying, or
distribution of this communication, or the taking of any action based on it,
is strictly prohibited.