0

所以,我知道这意味着什么。我知道问题出在哪里。但这是我的问题。我在由系统管理员管理的服务器上运行了一个控制应用程序,他拒绝从 Windows Server 2003 升级。这意味着我无法从 .NET Framework 3.5 升级到 .NET Framework 4.5。服务器也是32位的。

我的应用程序是一个 32 位、多线程和多用途的应用程序。它在我们的 oracle 数据库、跟踪数据库和其他数据库之间进行交互。将申请保留为一体的决定是上级的强制决定,因此目前无法更改。

它运行几个线程,这些线程实际上不会对内存、CPU 或网络产生太大影响,除了一个拆分为多个线程的过程,它执行以下操作。

它通过几个规则从我们的 oracle 数据库中获取所有数据

[12:39:09] Tabel 'tsdsmd' synchronisatie is gestart, volgens de regel: 'Select tsdsmd.* from tsdsmd where dosvlg > 100044294 and dosvlg < 109999999'
[12:39:09] Tabel 'tsdnaw' synchronisatie is gestart, volgens de regel: 'Select tsdnaw.* from tsdnaw where dosvlg > 110017149 and dosvlg < 119999999'
[12:39:09] Tabel 'tstrac' synchronisatie is gestart, volgens de regel: 'Select tstrac.* from tstrac where irdvlg = 0 and tsacdt > = '2013-10-01' and ( ( tsacdt > '2013-10-01' ) or ( tsacty > '14:39:00' and tsacdt > = '2013-10-01' ) )'
[12:39:09] Tabel 'tslay4' synchronisatie is gestart, volgens de regel: 'Select tslay4.* from tslay4 where tsprda > '2013-10-02' or ( tsprda = '2013-10-02' and tsprti > '11:59:05' )'
[12:39:09] Tabel 'tsttks' synchronisatie is gestart, volgens de regel: 'Select tsttks.* from tsttks'
[12:39:09] Tabel 'tstrac' synchronisatie is gestart, volgens de regel: 'Select tstrac.* from tstrac where irdvlg = NULL and tsacdt > = '2013-05-06' and ( ( tsacdt > '2013-05-06' ) or ( tsacty > '18:55:00' and tsacdt = '2013-05-06' ) )'
[12:39:09] Tabel 'tsdnaw' synchronisatie is gestart, volgens de regel: 'Select tsdnaw.* from tsdnaw where dosvlg > 100044297 and dosvlg < 109999999'
[12:39:09] Tabel 'tsdsmd' synchronisatie is gestart, volgens de regel: 'Select tsdsmd.* from tsdsmd where dosvlg > 110017149 and dosvlg < 119999999'
[12:39:09] Tabel 'tsartc' synchronisatie is gestart, volgens de regel: 'Select tsartc.* from tsartc where rnropd <> 10003254 and rnropd <> 10004964 and rnropd <> 10005050 and rnropd <> 10005882 and rnropd <> 10006505 and rnropd <> 24232743'
[12:39:09] Tabel 'vrarst' synchronisatie is gestart, volgens de regel: 'Select vrarst.* from vrarst left outer join ( select * from tsarkm where tsarkm.tskenm = 3005 ) tsarkm3005 on vrarst.rnropd = tsarkm3005.rnropd and vrarst.artkd = tsarkm3005.artkd where tsarkm3005.tskenm = '' and ( rnropd = 10006584 or rnropd = 10001012 or rnropd = 10006634 or rnropd = 10006484 or rnropd = 10006296 or rnropd = 10025 or rnropd = 10002297 or rnropd = 10004544 or rnropd = 10006469 or rnropd = 29000000 or rnropd = 10001015 or rnropd = 10007544 or rnropd = 10007614 )'
[12:39:09] Tabel 'tstrac' synchronisatie is gestart, volgens de regel: 'Select tstrac.* from tstrac where irdvlg = 0 and tsacdt > = '2013-08-12' and ( ( tsacdt > '2013-08-12' ) or ( tsacty > '13:49:00' and tsacdt = '2013-08-12' ) )'
[12:39:09] Tabel 'tslay4' synchronisatie is gestart, volgens de regel: 'Select tslay4.* from tslay4 where tsprda > '2013-10-02' or ( tsprda = '2013-10-02' and tsprti > '12:23:32' )'
[12:39:09] Tabel 'tsttks' synchronisatie is gestart, volgens de regel: 'Select tsttks.* from tsttks'
[12:39:09] Tabel 'tstrac' synchronisatie is gestart, volgens de regel: 'Select tstrac.* from tstrac where irdvlg = NULL and tsacdt > = '2013-10-02' and ( ( tsacdt > '2013-10-02' ) or ( tsacty > '11:12:00' and tsacdt = '2013-10-02' ) )'
[12:39:09] [Environment02] Tabel 'tsdsmd' synchronisatie is niet gestart omdat deze niet aan staat voor deze tabel
[12:39:09] [Environment02] Tabel 'tsdsmd' synchronisatie is niet gestart omdat deze niet aan staat voor deze tabel
[12:39:09] [Environment02] Tabel 'tsdnaw' synchronisatie is niet gestart omdat deze niet aan staat voor deze tabel
[12:39:09] [Environment02] Tabel 'tsdnaw' synchronisatie is niet gestart omdat deze niet aan staat voor deze tabel
[12:39:09] Tabel 'vrfvrd' synchronisatie is gestart, volgens de regel: 'Select vrfvrd.* from vrfvrd where vrfilk = 1 and rnropd <> 10003254 and rnropd <> 10004964 and rnropd <> 10005050 and rnropd <> 10005882 and rnropd <> 10006505 and rnropd <> 24232743 and vrvrdt = 0'
[12:39:09] Tabel 'tsdsmd' synchronisatie is gestart, volgens de regel: 'Select tsdsmd.* from tsdsmd where dosvlg > 36910060 and dosvlg < 36999999'
[12:39:10] Tabel 'tsdsmd' synchronisatie is gestart, volgens de regel: 'Select tsdsmd.* from tsdsmd where dosvlg > 46504450 and dosvlg < 46699999'

为了防止每个线程运行超过 15 分钟,我们将一些规则分成两条,动态范围在完成后更新,它是当前线程。

所以我测量的是网络负载大约是 10 m/bit~ 这很好。CPU 负载得到优化。它做了很多事情并且根本不会给处理器带来压力,因此应用程序不会减慢或停止或类似的事情。

问题是应用程序是 32 位的,运行 windows server 2003 和 .NET Framework 3.5。它有 4 GB 的 RAM。并且应用程序在此线程期间通常最多使用 1.0 ~ 1.5 GB。在该范围内的某个地方,应用程序会抛出异常并阻止我继续执行程序,即使我试图通过简单地结束威胁来处理异常,但不幸的是,异常会强制应用程序退出(或者在极少数情况下抛出断点错误)然后冻结。)。

因此,显然,将 .NET 升级到 4.5 是不可能的。我查看了查询规则,发现我需要所有带有 * 的列,它们返回大量数据,所以我无法降低那里的内存负载......

tl; dr:可以通过编程方式做什么来更有效地利用可用内存。或者我怎样才能以这种方式增加内存?

编辑:看起来我发现应用程序本身存在问题。它应该更新规则,但由于某种原因,以下规则没有更新:

'Select tstrac.* from tstrac where irdvlg = 0 and tsacdt > = '2013-08-12' and ( ( tsacdt > '2013-08-12' ) or ( tsacty > '13:49:00' and tsacdt = '2013-08-12' ) )' 

随着时间的流逝,所有这些跟踪和跟踪消息不断累积,以至于仅此查询就占用了大约 1.2 Gigs 的内存。无论如何,这里给出的答案都会被记住,因为它们也很有洞察力和帮助。

4

1 回答 1

1

3GB 开关能帮上忙吗?

于 2013-10-02T12:18:19.980 回答