L******e 发帖数: 136 | 1 一个多线程程序,(C#),所有的Lock看起来都没有问题,运行起来会有Deadlock。程
序本身读取多个文件并存入数据库,(SQL server),有可能是C# Lock和SQL server
lock相互产生deadlock。
如何debug这样的情况呢? |
s*****n 发帖数: 5488 | 2 微软的东西, take a dump,然后重启好了。
server
【在 L******e 的大作中提到】 : 一个多线程程序,(C#),所有的Lock看起来都没有问题,运行起来会有Deadlock。程 : 序本身读取多个文件并存入数据库,(SQL server),有可能是C# Lock和SQL server : lock相互产生deadlock。 : 如何debug这样的情况呢?
|
L******e 发帖数: 136 | |
L******e 发帖数: 136 | 4 谢谢楼上的回答。不是说一次暂时解决数据读写问题,而是要从程序里找出哪里产生
Deadlock并且彻底解决这个问题。有什么主意吗? |
c*****m 发帖数: 1160 | 5 你把每一个lock/unlock和对应的线程id都写到log里面,然后在死锁的时候看看log,
不就能发现是哪几个线程造成的死锁了么? |
L******e 发帖数: 136 | 6 Ah, thanks! That is a good idea! |
s*****n 发帖数: 5488 | 7 不是dump 了嘛?注意要等cpu没太多活动,但是心痛没有反应时取得。
然后windbg 打开dump file,!threads, !clrstack一个个看吧.
懒惰的话, 如果是C code, windbg直接支持。 c#网上应该有windbg的死锁检查的。自
己赵忠吧。
【在 L******e 的大作中提到】 : 谢谢楼上的回答。不是说一次暂时解决数据读写问题,而是要从程序里找出哪里产生 : Deadlock并且彻底解决这个问题。有什么主意吗?
|
L******e 发帖数: 136 | 8 问题是,很有可能是数据库的Lock和C#的Lock相互死锁,Dump只能查c#Lock吧? |
b***i 发帖数: 3043 | 9 任何一个获取lock的地方都printf,不信查不出来。
server
【在 L******e 的大作中提到】 : 一个多线程程序,(C#),所有的Lock看起来都没有问题,运行起来会有Deadlock。程 : 序本身读取多个文件并存入数据库,(SQL server),有可能是C# Lock和SQL server : lock相互产生deadlock。 : 如何debug这样的情况呢?
|
n*w 发帖数: 3393 | 10 这个很可能和数据库的lock有关。一次写一个table还是多个table?贴个table的
schema? |
s*****n 发帖数: 5488 | 11 unmanageed code.被锁的线程只能是
waitforSingle/multipleOjbect enterCritialSection on top of stack.
留心这些线程。
!CS?记不清楚了,查查手册可以找到关于死锁的。可以列出所有critricalsections.很
容易看到里面挂着多少等待线程。
一句话,dump is your friend.慢慢查吧。你需要系统的symbols.
【在 L******e 的大作中提到】 : 问题是,很有可能是数据库的Lock和C#的Lock相互死锁,Dump只能查c#Lock吧?
|
c*********e 发帖数: 16335 | 12 读取多个文件并存入数据库,是同時读入多个文件吗?读每个文件的sqlconnection是一
样的同時的吗?
server
【在 L******e 的大作中提到】 : 一个多线程程序,(C#),所有的Lock看起来都没有问题,运行起来会有Deadlock。程 : 序本身读取多个文件并存入数据库,(SQL server),有可能是C# Lock和SQL server : lock相互产生deadlock。 : 如何debug这样的情况呢?
|