首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)

,唯有通过PowerShell杀掉对应的w3wp进程才可以解决这个问题。...1.一开始采用猜的办法,去项目中找while、lock等关键词,这样无异于大海捞针,而且不严谨的修改还会导致其他更为严重的问题产生,很快这个方案在搜寻过一遍后被放弃了。...发现有7个线程比较耗时,这时候心想我用的线程也是7个,这时候内心无比的激动。 切换到21线程,查看堆栈信息后发现 ?...在Dictionary的Insert时堵塞了,这时候查看其它占时很长的线程状态,也不外乎是这里堵塞了。 Dictionary中的Insert方法真的会堵塞吗? 写下如下测试代码后运行了几次 ?...上面是我认为存在问题的地方,当一个线程执行过Initialize后buckets数组的值被修改,而第二个线程同时进入了Initialize方法,那么第一个线程所维护的值被破坏,造成在算法环节出现了死循环

1.2K50

【踩坑】Android 编译线程爆了, gradle 内存 OOM 解决之路

探索原因 从报错的信息来看,‘jar transform Thread’ 有时候的线程数非常多, 很有可能是同时开启的线程数过大,导致内存不足,最终 OOM。...他在官网上找到了编译 gradle 版本的方法 编译完成之后,上传到 CC 的 S3 服务器上面,我们在 gradle-wrapper.properties 下面修改,替换成自己的 gradle 版本...到此,我们对 gradle jar transfrom thread 的线程数进行了限制,合理应该是不会再出现 OOM 了,如果还会出现,可以保留现场,找我或者汉光看看。...,观察 jar transform Thread 是否异常 debug gradle assemble 任务,观察 线程名包括 jar transform Thread Thread 的调用堆栈 分析...调用堆栈,找到原因 结合 gradle 官方代码,查看问题是否已经解决 那有没有更快的方法呢?

89650
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你所需要掌握的问题排查知识

    这里提到的排查问题不仅仅是在Coding的过程中Debug,还包括测试阶段、线上发布阶段问题的排查。特别是在生产环境中,一般是没办法或很难进行Debug操作的。...如果没办法直接从日志中发现异常,那就只能看看应用到底在干嘛了(可分析应用在异常时期的线程内存堆栈信息)。...一旦故障发生,讨论中也可提供你解决办法的思路,举一反三,推进问题的排查与解决。...但即使如此,我们仍然可以在事情结束后为保留一份分析资料,总结并记录处理过程中的执行步骤以及解决途径,则能帮助自己和团队积累宝贵的处理经验。...8、在升级版本或者替换或修改文件时,一定要做好备份,要保证随时可以还原。 9、程序在使用多线程时,尽可能的减少多线程竞争锁,可以将数据分段,各个线程分别读取。

    1.4K10

    听说过代码洁癖,Bug洁癖怎么解?

    上面这段 traceback 只有黑白两个颜色,无法像代码高亮那样,对肉眼实现太不友好了 无法直接显示报错的代码,排查问题慢人一步,效率太低 那有没有一种办法,可以解决这些问题呢?...在 windows 上你可以使用 Powershell,cmder 等 在 Mac 上你可以使用自带的终端,或者安装一个更好用的 iTerm2。 ?...display_locals 启用后,将显示在顶部堆栈框架代码中的局部变量及其值。 display_trace_locals 启用后,其他堆栈框架代码中出现的局部变量将与它们的值一起显示。...stack_depth 要显示的堆栈跟踪的最大条目数。什么时候0将显示整个堆栈,这是默认值。 exception_above 启用后,异常将显示在堆栈跟踪上方。...exception_below: 启用后,异常显示在堆栈跟踪下方。 reset_stdout 启用后,重置转义序列将写入stdout和stderr;如果您的控制台留下错误的颜色,请启用此选项。

    55620

    我写的 Bug 居然可以这么美

    上面这段 traceback 只有黑白两个颜色,无法像代码高亮那样,对肉眼实现太不友好了 无法直接显示报错的代码,排查问题慢人一步,效率太低 那有没有一种办法,可以解决这些问题呢?...在 windows 上你可以使用 Powershell,cmder 等 在 Mac 上你可以使用自带的终端,或者安装一个更好用的 iTerm2 2....display_locals 启用后,将显示在顶部堆栈框架代码中的局部变量及其值。 display_trace_locals 启用后,其他堆栈框架代码中出现的局部变量将与它们的值一起显示。...stack_depth 要显示的堆栈跟踪的最大条目数。什么时候0将显示整个堆栈,这是默认值。 exception_above 启用后,异常将显示在堆栈跟踪上方。...exception_below: 启用后,异常显示在堆栈跟踪下方。 reset_stdout 启用后,重置转义序列将写入stdout和stderr;如果您的控制台留下错误的颜色,请启用此选项。

    92640

    dotnet 代码调试方法

    调试过程重点关注多个线程访问到的值的变化以及方法调用顺序 在 VisualStudio 可以通过线程窗口看到当前程序开启的所有线程,同时对应线程的调用堆栈 如何调试已发布库?...找到了异常的代码,可以在代码的调用上下进行断点调试 关于第一次机会异常请看C#/.NET 如何在第一次机会异常 FirstChanceException 中获取比较完整的异常堆栈 - walterlv...通过调用堆栈和异常的方法可以快速定位代码调用是否符合预期,各个函数传入参数是否符合预期,此时的调试不限在 DEBUG 下,同时适合在用户端调试发布的代码 在调用堆栈的使用过程,会自动将没有加载符号的代码作为外部代码隐藏...但是在调用堆栈依然可以看到用户代码调用顺序,同时在局部窗口也可以发现每次调用的局部变量 此时可以再打开一个 VisualStudio 找到对应的函数的对应代码,按照调用堆栈里面的调用逻辑,是否可以找到解决方法...上报异常 不是所有的用户都可以将你拉过去打靶,也不是所有的异常都需要解决 建议在软件运行过程中,所有没有接住的异常还有被接住但是需要解决的都进行上报 此时需要一个后台的服务器用于接受用户运行过程中上报的信息

    1.5K10

    实战 | 记一次蠕虫病毒内网传播的应急响应

    随后查看crontab系统的计划任务文件未发现有定时任务,查看历史命令文件也未发现任何异常敏感的命令,查看passwd文件也未发现有新增加异常的用户。...为确保是否存在webshell这类后门并将zabbix的整个web目录打包下载至本地使用D盾进行后门查杀,也未发现有任何异常后门。...测试也能知道当前的攻击机器是在开着机的,用了最笨最实际的办法对该楼层所有开机的机子进行查看内网IP地址是否与上网行为管理记录的IP对得上,费了大半天的时间终于定位到了该终端的工位。...0x07 总结 该木马运行后会释放一个m.ps1 PowerShell运行程序,此程序会调用Mimikatz脚本,进行本机用户和密码的抓取, 同时创建计划任务,每天7点自动向v.beahh.com发送http...可以判定该后门是驱动人生后门感染的,后门生成的时间也正好和驱动人生后门事件爆发的时间对得上,建议将计算机登录口令修改成强口令;将系统中的高危端口关闭;安装杀毒防护软件定时全盘杀毒扫描。

    5K61

    JavaScript中错误正确处理方式,你用对了吗?

    在这里异常会调用堆栈进行冒泡。同时错误会展开堆栈,这对调试非常有帮助。除了抛出异常,解释器还会沿着栈寻找另外的处理。这也带来了可以从堆栈顶部处理错误的可能。...展开堆栈 处理异常的一种方式是在调用堆栈的顶部加入try...catch。...捕获堆栈 在解决问题时,调用堆栈会非常有用,同时浏览器正好可以提供这些信息。虽然堆栈属性不是标准的一部分,但是最新的浏览器已经可以查看这些信息了。...在浏览器中,需要将事件处理添加到DOM。这意味着如果你正在构建第三方库,那么你的事件会与客户端代码共存。window.addEventListener( )会帮你进行处理,同时也不会抹去现有的事件。...在调试时调用堆栈也会非常有用,所以不要低估调用堆栈的作用。 在JavaScript中,错误信息仅适用于单个域。因为在使用来自不用域的脚本时,将会看不到任何错误详细信息。

    64810

    Windows自带的PowerShell难用?试试使用Windows Terminal调用;更强大和美观

    那么Windows上有没有用过Powershell呢? 还是……自带的PowerShell太丑而不用?...那么试试用Windows Terminal调用PowerShell吧~~ 程序特性 PowerShell(包括Windows PowerShell和PowerShell Core)是微软公司开发的任务自动化和配置管理框架...PowerShell的特性很多,比如: 一致性的设计让所有工具和系统资料的使用语法、命名原则都相同。 脚本语言简单易学,且支持现有的脚本程序和命令行工具。...“白话文”版本 说白了,一般情况下,你完全可以吧PowerShell当作“大号”的CMD(命令提示符),在继承原有命令的同时,支持OpenSSL、OpenSSH等工具函数,比如:支持使用SSH连接Linux...调用PowerShell 安装好,或者说直接打开Windows Terminal,默认就是PowerShell界面啦: image.png 调用CMD 同样,Windows Terminal支持调用CMD

    6.2K90

    WPF 如何跨线程重新抛出异常

    有一些代码是在框架层写的,这部分代码不应该在后台线程抛出异常,如何将后台线程的异常在主线程抛出,同时不会带上主线程的堆栈可以保留异常的全部信息 在 .NET 提供了 ExceptionDispatchInfo...类,可以用于捕获某个异常,然后使用提供的抛出方法重新抛出 可以用在某个地方统一收集异常,然后统一抛出,此时抛出的异常的堆栈和信息都不会改变,会比下面的方法更好 public static...,可以从堆栈看到,没有原先抛异常 Foo 函数,将会让异常堆栈加上了抛出函数的调用堆栈,如果此时是在跨线程用的,那么将会找不到原有线程堆栈 at KicaicicayiJearjelrelur.MainWindow.ReThrowException...{ ExceptionDispatchInfo.Capture(exception).Throw(); } 可以从调用堆栈看到开始的异常的堆栈 at KicaicicayiJearjelrelur.MainWindow.Foo...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    91510

    office365 E5调用api使E5开发者续订 修复版AutoApi (不使用服务器)

    但是原作者的代码需要在服务器上运行,成本较高。后来又有一位大佬找到了不用服务器也可以运行的的办法。而后者的方法是建立在前者的基础上的,因此我将他们的教程融合了起来,并对其中的个别词语进行了微调。...最后有视频教程 E5自动续期程序,但是不保证续期 设置了周六日(UTC时间)不启动自动调用,周1-5每6小时自动启动一次 (修改看教程) 调用api保活: 查询系api:onedrive,outkook...软件掏出来 打开 rclone.exe 所在文件夹,shift+右键,在此处打开powershell,输入下面修改后的内容,回车后跳出浏览器,登入e5账号,点击接受,回到powershell窗口,看到一串东西...(不确定是否都需要进行这一步,我自己做视频教程的时候发现有的。...流程 -> build -> run api 就能看到每次的运行日志 (必需点进去build里面的run api.XXX看下,api有没有调用到位,操作有没有成功,有没有出错) image 再点两次星星

    7.2K11

    再聊聊pthread oom 问题 | 性能优化

    ,因为光从线上的堆栈上来看,你很难分析出问题,同时因为是偶发线上,所以也没办法稳定复现这部分问题。...但是如何获取到堆栈呢,我第一时间想到的就是抛出一个异常打印。那么堆栈是在哪里被持有的呢????...这个是在Throwables里面获取到的。从这里我们其实可以看出来,堆栈信息是保存在线程上的。 这么说起来线程被作为gcroot就可以理解了。因为虚拟机持有了所有存活的线程实例和堆栈。...这次也还是使用asm吧,之前我们在使用asm的时候大部分场景都是采取新增一个函数调用的方式。这次我们将采取类替换的规则。...比方说之前我们做的是不是够好了,还有没有优化的空间,同时有没有可能有技术手段进行监控,防范于未然。 之前听一位大佬说回头看看你三个月之前写的代码,如果你觉得之前写的很完美,证明你划了三个月的水。

    27720

    【壹刊】Azure Monitor 一:Application Insights

    一,引言  Azure Monitor 是 Azure 中的一项完整堆栈监视服务,是一种收集和分析遥测数据的服务。它提供了一组完整的功能来监视 Azure 资源以及其他云中和本地的资源。...它将自动检测性能异常,并且包含了强大的分析工具来帮助诊断问题,了解用户在应用中实际执行了哪些操作。 它旨在帮助持续提高性能与可用性。...查看手动抛的异常 Exception 我们可以看出异常的时间,异常信息,异常发生的位置,异常的类型,操作等等 记录的异常行号为37行,可以对比一下手动抛出异常的行数 同时,application...切换到 Exceptions,可以看到这个异常的信息了 同时,我们可以得到一些额外的堆栈信息,甚至可以看到异常的代码行,控制器方法,类等信息 回到上一个话题,Application Insights...提供用户数据的分析,用户,会话,事件等Application Insights 提供服务器端监视和客户端/浏览器监视功能,它默认数据保留90天,同时还有支持实时流数据上报(延时低至1秒,不保留数据),增加自定义埋点

    45310

    我是这样搞懂一个神奇的BUG

    如果该邮箱已经被注册,会提醒并且不让注册的。难道对方是个黑客,直接调用API发请求?如果是这样那就更加危险了,我们已经被黑客盯上了!...通过用户行为可以得知出错前的整个操作流程: 打开我们网站的首页 点击“免费试用“进入注册页面 输入邮箱 输入密码 再次出入密码 点击创建团队 点击创建团队 团队创建成功 报错 那么问题来了:有没有什么异常的行为...凭着我敏锐的嗅觉意识到可能是由于用户快速点击”创建团队”按钮两次导致。通过时间记录发现第一次点击是在1.86m,第二次在1.87m。也就是说:用户在很短的时间内快速点击了两次。...用户点击之后,设置被点击的按钮无效直到点击请求完全被处理;2. 将验证邮箱是否存在的和创建团队两个异步事件想办法合并为一个原子操作。综合考虑,决定使用第一种方案。因为实现简单,对现有代码改动不大。...总的来说:当在没有堆栈信息或者报错信息难以理解的时候,Fundebug记录的用户行为真的很有用。五星推荐前端开发接入到项目中!

    60120

    手动设置的静态DNS老是变成DHCP,如何破

    、英文逗号隔开就行 改好后的脚本放到这个目录下C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts,按照常规办法修改静态DNS...,修改后重启机器,过个两三分钟去看,看看DNS有没有被reset成dhcp,如果没有,那就OK。...如果还是不行,把代码里的3改成2试试 代码里的2和3两种情况我都遇到过,由于cloudbase-init是通过调用powershell代码起作用的,我猜测这个判断逻辑2和3的差异可能自定义镜像有常驻的开机计划任务开了弱干个...powershell进程放置在了后台,如果是这种情况,除过2和3,可能还会有4、5、6等情况,具体就是看开机后在后台的powershell进程数量有多少 cloudbase-init配置文件位置: ‪C...:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf 配置文件里这2行配置我在IBM云服务器的初始化配置文档里看到过

    2.2K40

    Android开发:不会ANR?这里有ANR解析和案例!

    (2) 查看主线程状态:发现ANR代码片段 自身代码 逻辑导致ANR问题,其主要分析思路是查看主线程堆栈及线程状态,我们在性能管理页面上“主线程堆栈”页签中能够找到问题堆栈,发现该问题发生时,主线程处于获取锁状态...”调用中。...[1639362199237710.jpg] 通过在代码中搜索mLock加锁代码的调用,发现了仅在MainActivity文件中,才会存在“mLock.readLock.lock()”代码, 由此判断,...,也就是我们之前的问题代码范围中,我们通过该堆栈,找到了异常代码。...解决问题 为了修复了该问题,我们做了以下措施,解决该问题的同时,预防同类问题发生: 分析异常具体原因并修改代码,防止越界异常再次出现。 捕获该异常,保护代码在资源释放前被异常抛出。

    1.4K40

    100行代码搭建一个IO泄露监测框架

    IO泄漏检测的实现思路头脑风暴一下,想要检测流有没有关闭,关键就是检测诸如FileInputStream等操作文件流的类close方法有没有调用;那什么时机才应该去检测呢,当FileInputStream...同时还会调用CloseGuard.open()方法:这个方法主要干的事情就是创建了一个Throwable对象,获取当前流创建的堆栈,并赋值给CloseGuard的closerNameOrAllocationInfo...接口的类,并在自定义类中实现io泄漏异常上报的逻辑,不就完美实现监听了吗!!...在Android P以下自然可以通过反射调用,但是在Android P及以上使用反射就会报错,所以还得探索一种高版本能够成功反射系统非公开api的方法。四....:FreeReflection:3.1.0'}然后在Application.attachBaseContext()方法中调用;csharp复制代码@Overrideprotected void attachBaseContext

    14120

    Kernel Exception 问题分析详解

    4.离线调试, Offline debug, 指的是在程序的运行中收集需要的信息,在Bug发生后根据收集到的信息来分析的一种手段。...64bit kernel: 原生的kernel,BUG()是直接调用panic()的: ? 不过Mediatek修改了BUG()的实现,这样有更多的调试信息输出(die()有寄存器等信息输出) ?...__die()流程 异常类型信息 开始印出异常类型等信息,看一份kernel log有没有oops,直接搜索关键字Internal error就可以了: ? 输出的信息大致如下: ?...2. panic通知链 panic()会调用栈通知链上的回调函数同时感兴趣的模块,比如我们的aee注册了回调函数,用于保存kernel log/mini dump等关键信息,并将其保存到emmc的expdb...里面包含了寄存器信息、堆栈信息和调用栈,我们就可以通过工(addr2line)还原当时异常的位置。不过nested panic能参考的信息很少,不像普通的KE那样丰富。 至此,本篇已结束。

    2.3K20
    领券