- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序(使用Delphi 2009编写),该应用程序允许用户在选定的系统上运行查询,然后将结果合并到单个报告中。
应用程序的简要说明:
用户选择一个查询和一组要运行该查询的系统。通过创建一个新线程在其中运行查询,并使用TADOQuery在该线程内实际运行查询,可以在所有系统上同时运行该查询。查询完成运行后,将调用TADOQuery.SaveToFile,并将pfXML作为参数传递,以将结果保存到XML文档。一旦所有查询运行完毕,应用程序将解析所有XML文档并将它们合并为一个XML文档。然后,用户可以加载报表,该报表调用TADOQuery.LoadFromFile加载报表并将其显示在TListView中。
为了确保用户不会通过提交太多查询(从而启动太多线程)而不会使PC过载,我已经使用记录数组实现了一个队列。每个记录包含诸如查询名称,系统,状态(正在运行,已完成或未决)等信息。实现队列的另一个原因是用户可以同时提交多个查询(即,他们不必等待查询的时间)。第一个完成,然后再提交另一个)。记录数组可能不是实现队列的最有效方法,但它可以工作。我将并发运行的线程数保持为100(可由用户更改),并在运行线程结束时启动新线程,方法是将线程内查询的完成情况与管理队列的过程进行同步。内存使用量绝不会增加约25-30K。
最后一条相关信息是该应用程序还包含一个作业计划程序,该程序使用户可以指定何时运行查询。希望使软件在服务器上无人看管的情况下运行并每天在每天的特定时间每天创建报告的客户使用此功能。
问题:
该应用程序可以在Windows XP上正常运行。无论提交多少查询。但是,在Windows Server 2003上随机运行一段时间后,该应用程序将停止运行。尝试与应用程序进行交互(或将其关闭)将导致报告访问冲突。我无法终生确定它的来源或原因。
我的第一个想法是,它可能与操作系统中内存管理的实现有关,但我看不出是什么原因引起的。我已经在完全 Debug模式下使用FastMM4编译了该应用程序的一个版本,但它没有报告释放本不应该释放的内存的问题,或者在正常情况下运行时没有内存泄漏,因此尽管我仍然确定内存管理存在问题,但我看不到会发生什么。
我注意到发生访问冲突后,我的应用程序的temp文件夹中有很多报告文件(这意味着某些查询已运行并返回了结果,但并非所有线程都已完成并且报告还没有尚未合并)。作业调度程序还报告运行状况良好,并将作业提交到队列中,但由于最大线程数(默认为100)正在运行(我一直在进行测试,每20个通过调度程序提交作业,因此尚未运行)分钟,然后将应用程序放置一整夜)。
这使我相信队列(记录数组)的处理可能存在问题。如果线程完成并与管理队列的过程同步,但是队列有问题,则不会启动下一个线程,并且由于并非所有查询都已完成,因此temp文件夹中的报告将赢得不会被合并。这似乎是应用程序卡住的地方。
因此,我有两个问题:
1.是什么原因导致访问冲突?与队列有关,还是可能与其他有关?
2.为什么该应用程序在Windows XP上可以正常运行,但在Windows Server 2003上却无法运行?
更新
在测试过程中,我设法对应用程序进行了一定程度的设置,以至于现在我也可以在Windows XP上产生该错误,因此它似乎并不局限于Windows Server2003。它似乎出现在Windows Server 2003上比XP快得多。
如果我在一组系统上运行一组查询,请等到所有报告创建完毕后再重复该过程,最终,查询只是停止提交,并双击应用程序中的任何位置(并尝试关闭),结果是:一个访问冲突(总是写,尽管内存地址有所不同,并且并不总是写地址0)。
我已经使用MadExcept跟踪了调用堆栈,它没有显示任何异常-仅触发了双击事件的代码行。
某种情况正在阻止正在提交的查询,并且(我想)还会导致访问冲突,但是我看不出它可能是什么。
最佳答案
除了实际答案外,更多的是故障排除技巧...
对于#2,硬件是否相同?如果没有,那可能确实是单核与多核(或处理器)的问题。由于它是一个多线程应用程序,因此期望它在多个处理器/内核中表现出不同的行为也不是没有道理的。因此,请确保您没有用太多变量(硬件还是操作系统)来使问题蒙上阴影。
关于multithreading - Windows Server 2003上的多线程应用程序中的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4313886/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!