以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  服务器卡  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145814)

--  作者:刘林
--  发布时间:2020/2/8 10:03:00
--  服务器卡
请问第师,我查了一下都用的异步函数,并发数也不多,为什么出现服务器卡死,请问该怎么办,主要查哪些地方可以缓解,优化从哪些地方来做

另外写在httprequse中的case是不是同步提交?

2020-02-08 09:46:04.2297
Exception has been thrown by the target of an invocation.
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Foxtable.UserFunctions.Execute(String Name, Object[] Args)
Object reference not set to an instance of an object.
   at UserCode.Aag4xxjwvOZhw9TAh(Object[] Args)
这个错误志是什么造成的
[此贴子已经被作者于2020/2/8 10:31:28编辑过]

--  作者:有点蓝
--  发布时间:2020/2/8 11:04:00
--  
服务器卡死指什么,电脑死机?数据库慢?程序慢?

服务器带宽有多少?cpu、内存配置怎么样?并发数有多少:10?100?1000?.....?

1、对于数据库
1)、表加上合适的索引
2)、表结构有没有可以优化的地方
3)、sql尽量使用参数化的方式执行
2、对于web服务端
1)不要混用多种前端ui框架
2)不要使用InsertHTML插入完整的网页头部格式,应该改为stringbuilder
4)利用日志等逐个网页进行分析,看看不同环境(不同手机,不同网络的电脑)、不同并发数下访问的这个网页的速度怎么样?觉得不满意的适当调整代码进行优化。
3、对于客户端
1)、尽量减少大批量数据的加载
2)、利用存储过程、视图、参数化执行等提高数据库执行的速度和效率
4、对于服务器:增加带宽,cpu、内存

以我的能力也就能提出这些建议。

从我了解到的信息,您开发的系统已经不能算小了。程序规模与质量和开发人员的能力应该是同步增长的。随着程序规模(功能模块、客户端数、数据量等等)不断增长,就会出现各种的不稳定,不断的优化和重构是必然的。如果前期开发团队的能力比较弱,重构甚至可能会推翻前面的所有设计,然后重新开发。当然是否能够重构也要看后期开发团队的能力,如果能力跟不上,别说重构了,连优化可能都没有办法,也就只能原地踏步,天天忙着救火了。

--  作者:有点蓝
--  发布时间:2020/2/8 11:06:00
--  
除了调用异步函数外,其它代码肯定都同步的。1楼日志的错误提示是使用了空对象,类似find之后的dr没有判断是否为空值等错误
--  作者:刘林
--  发布时间:2020/2/8 11:53:00
--  
好,谢谢,我一项一项的再改下看,另外我估计有不有用户连续点某个网页连续提交造成呢?如何防止用户连续提交造成
[此贴子已经被作者于2020/2/8 11:52:48编辑过]

--  作者:刘林
--  发布时间:2020/2/8 12:31:00
--  
语句已终止。
将截断字符串或二进制数据。
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at System.Data.Common.DbDataAdapter.UpdateRowExecute(RowUpdatedEventArgs rowUpdatedEvent, IDbCommand dataCommand, StatementType cmdIndex)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

2020-02-08 12:16:30.7151
语句已终止。
将截断字符串或二进制数据。
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at System.Data.Common.DbDataAdapter.UpdateRowExecute(RowUpdatedEventArgs rowUpdatedEvent, IDbCommand dataCommand, StatementType cmdIndex)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

2020-02-08 12:16:30.7395
语句已终止。
将截断字符串或二进制数据。
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at System.Data.Common.DbDataAdapter.UpdateRowExecute(RowUpdatedEventArgs rowUpdatedEvent, IDbCommand dataCommand, StatementType cmdIndex)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

2020-02-08 12:16:30.7727
语句已终止。
将截断字符串或二进制数据。
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at System.Data.Common.DbDataAdapter.UpdateRowExecute(RowUpdatedEventArgs rowUpdatedEvent, IDbCommand dataCommand, StatementType cmdIndex)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

2020-02-08 12:16:30.8138
语句已终止。
将截断字符串或二进制数据。
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at System.Data.Common.DbDataAdapter.UpdateRowExecute(RowUpdatedEventArgs rowUpdatedEvent, IDbCommand dataCommand, StatementType cmdIndex)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)

2020-02-08 12:16:36.0933
语句已终止。
将截断字符串或二进制数据。
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at System.Data.Common.DbDataAdapter.UpdateRowExecute(RowUpdatedEventArgs rowUpdatedEvent, IDbCommand dataCommand, StatementType cmdIndex)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)


请问老师如何看出是哪个表现哪个字段有问题呢

--  作者:有点蓝
--  发布时间:2020/2/8 13:18:00
--  
这种错误是列长度太短。但是日志是看不出是哪个字段的。测试看是什么功能引起的,检查相关代码
--  作者:刘林
--  发布时间:2020/2/8 14:35:00
--  
老师,我直接看到服务,当出现上面问题错误窗口,关闭这个窗口就关不到了,整个就卡起了,这是什么原因,
--  作者:有点蓝
--  发布时间:2020/2/8 14:53:00
--  
您是直接给table的行赋值才会有这种错误窗口提示的。建议服务端项目尽量都不要操作主表,而是通过SQLcommand,或者sqladdnew、sqlfind之类的来控制数据的增删改,后者可以被BeforeShowErrorMessage事件处理掉。而操作主表是会有这行错误窗口弹出来的,特别是使用异步函数的情况下,更不应该直接操作主表。
--  作者:刘林
--  发布时间:2020/2/8 16:13:00
--  
老师是不是异步函数中不能用adnew只能用sqladnew
--  作者:有点蓝
--  发布时间:2020/2/8 16:15:00
--  
不能使用主表的adnew,如果是SQLcommand返回的临时表就可以。