以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 服务器卡 (http://foxtable.net/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 3)考虑使用nginx进行分流:http://www.foxtable.com/bbs/dispbbs.asp?boardid=24&Id=144335 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返回的临时表就可以。 |