我在对我服务器进行压力测试的时候,发现:程序中断在比较底层的代码。
_CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue()
{
#ifdef _M_IX86
PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE;//这里过不去(%100)
if (!flsGetValue)
{
flsGetValue = _decode_pointer(gpFlsGetValue);
TlsSetValue(__getvalueindex, flsGetValue);
}
return flsGetValue;
#else /* _M_IX86 */
return NULL;
#endif /* _M_IX86 */
}
发现%30是从WSAAccept函数这儿发生的。
我就搞不明白了,怎么会出现这个怪异的问题。
我测试的方式是:连接上发送一个命令,等待命令返回,断开连接。
客户端之间的连接请求是有时间间隔的,在这儿我是5毫秒发送一个,即测试软件一秒发送200个连接以及命令。
8 个解决方案
#1
#2
#ifdef _M_IX86//这一行也有问题吧
PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE;//这里过不去(%100)
赋值有问题吧
PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE;//这里过不去(%100)
赋值有问题吧
#3
这个函数是在这个文件中:
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src路径下的tidtable.c文件中。
不是我写的,要是我写的我就不郁闷了。
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src路径下的tidtable.c文件中。
不是我写的,要是我写的我就不郁闷了。
#4
反正是有一点需要注意:投递请求的时候,OVERLAPPED结构体需有效
#5
有点忘了说明,我这服务器还是能跑一段时间的。
先是1万次测试通过,大概19秒收发完成。
完了我直接给他上1千万次,每次执行的时间是一样的,那样的话就是服务器需要处理完所发的时间多点而已。
可是服务器都撑不到1千万结束的时候,都是在开启运行个10分钟左右就挂了。
都是挂在上面的那个位置,好像是说线程信息出现什么东东吧,我只能查到这些了。
不知道有没有人知道的,指点下我。
烦得很啊。
先是1万次测试通过,大概19秒收发完成。
完了我直接给他上1千万次,每次执行的时间是一样的,那样的话就是服务器需要处理完所发的时间多点而已。
可是服务器都撑不到1千万结束的时候,都是在开启运行个10分钟左右就挂了。
都是挂在上面的那个位置,好像是说线程信息出现什么东东吧,我只能查到这些了。
不知道有没有人知道的,指点下我。
烦得很啊。
#6
1、测试的命令是固定,都是登录请求。
2、服务器查询数据库发送请求 结果给测试软件。
3、测试软件收到数据断开连接
3个步骤为一次测试。
测试软件间隔1毫秒发送一次这样的操作。
测试之间都是异步的,这样测试1万次都没有问题。大概19秒
如果1千万次,也就10分钟就挂了。
2、服务器查询数据库发送请求 结果给测试软件。
3、测试软件收到数据断开连接
3个步骤为一次测试。
测试软件间隔1毫秒发送一次这样的操作。
测试之间都是异步的,这样测试1万次都没有问题。大概19秒
如果1千万次,也就10分钟就挂了。
#7
表面上看是RTL失败,但实际上是程序BUG,你应该看看 CALLSTACK!
#8
这个问题最终都没有解决,可怜啊。
#1
#2
#ifdef _M_IX86//这一行也有问题吧
PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE;//这里过不去(%100)
赋值有问题吧
PFLS_GETVALUE_FUNCTION flsGetValue = FLS_GETVALUE;//这里过不去(%100)
赋值有问题吧
#3
这个函数是在这个文件中:
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src路径下的tidtable.c文件中。
不是我写的,要是我写的我就不郁闷了。
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src路径下的tidtable.c文件中。
不是我写的,要是我写的我就不郁闷了。
#4
反正是有一点需要注意:投递请求的时候,OVERLAPPED结构体需有效
#5
有点忘了说明,我这服务器还是能跑一段时间的。
先是1万次测试通过,大概19秒收发完成。
完了我直接给他上1千万次,每次执行的时间是一样的,那样的话就是服务器需要处理完所发的时间多点而已。
可是服务器都撑不到1千万结束的时候,都是在开启运行个10分钟左右就挂了。
都是挂在上面的那个位置,好像是说线程信息出现什么东东吧,我只能查到这些了。
不知道有没有人知道的,指点下我。
烦得很啊。
先是1万次测试通过,大概19秒收发完成。
完了我直接给他上1千万次,每次执行的时间是一样的,那样的话就是服务器需要处理完所发的时间多点而已。
可是服务器都撑不到1千万结束的时候,都是在开启运行个10分钟左右就挂了。
都是挂在上面的那个位置,好像是说线程信息出现什么东东吧,我只能查到这些了。
不知道有没有人知道的,指点下我。
烦得很啊。
#6
1、测试的命令是固定,都是登录请求。
2、服务器查询数据库发送请求 结果给测试软件。
3、测试软件收到数据断开连接
3个步骤为一次测试。
测试软件间隔1毫秒发送一次这样的操作。
测试之间都是异步的,这样测试1万次都没有问题。大概19秒
如果1千万次,也就10分钟就挂了。
2、服务器查询数据库发送请求 结果给测试软件。
3、测试软件收到数据断开连接
3个步骤为一次测试。
测试软件间隔1毫秒发送一次这样的操作。
测试之间都是异步的,这样测试1万次都没有问题。大概19秒
如果1千万次,也就10分钟就挂了。
#7
表面上看是RTL失败,但实际上是程序BUG,你应该看看 CALLSTACK!
#8
这个问题最终都没有解决,可怜啊。