zoukankan      html  css  js  c++  java
  • 在写性能监视器的时候,程序报System.ComponentModel.Win32Exception错误

    应用原因:我做了一个C/S系统。很多客户端连接到服务器来进行数据上报的工作。但由于数据量的巨大,程序经常出现System.OutOfMemoryException的错误。
    接下来我要对IIS进行应用程序池的设置,同时也需要修改程序。这时我就想知道,在出现错误时,机器的各个进程的状态。比如当前的服务器有启用哪些进程,这些进程的内存占用为多少,W3WP占用的物理内存与虚拟内存为多少。
    于是我写了如下的应用程序代码:
    ....

    ArrayList al = GetCurrentProcess(iErrorID);
                    foreach (NoteErrProcessInfo pInfo in al)
                    {
                        WriteProcessInfoToDataBase(pInfo);
                    }


    /// <summary>
            /// 取得当前所有线程的信息数组
            /// </summary>
            /// <returns>线程信息数组 </returns>
            private static ArrayList GetCurrentProcess(int iErrorID)
            {
                ArrayList al = new ArrayList();
                Process[] MyProcesses = Process.GetProcesses();
                foreach (Process MyProcess in MyProcesses)
                {
                    if (MyProcess.ProcessName.ToUpper() != "IDLE")
                    {
                        al.Add(GetProcessInfo(iErrorID, MyProcess.Id));
                    }
                }
                return al;
            }


    /// <summary>
            /// 给线程信息类赋值
            /// </summary>
            /// <param name="iErrorID">错误行号 </param>
            /// <param name="iProcessID">线程ID值 </param>
            /// <returns> </returns>
            private static NoteErrProcessInfo GetProcessInfo(int iErrorID,int iProcessID)
            {
                NoteErrProcessInfo pInfo = new NoteErrProcessInfo();
                Process MyProcess = Process.GetProcessById(iProcessID);
                pInfo.ErrorID = iErrorID;
                pInfo.ProcessName = MyProcess.ProcessName;
                pInfo.ProcessId = MyProcess.Id.ToString();
                pInfo.ThreadsCount = MyProcess.Threads.Count.ToString();
                pInfo.CpuProcessorTime = MyProcess.TotalProcessorTime.ToString();
                pInfo.PriorityClass = MyProcess.PriorityClass.ToString();
                pInfo.StartTime = MyProcess.StartTime.ToLongTimeString();
                pInfo.PrivateMemorySize = (MyProcess.PrivateMemorySize64 / 1024).ToString() + "K";
                pInfo.PeakVirtualMemorySize = (MyProcess.PeakVirtualMemorySize64 / 1024).ToString() + "K";
                pInfo.PeakPagedMemorySize = (MyProcess.PeakPagedMemorySize64 / 1024).ToString() + "K";
                pInfo.PagedSystemMemorySize = (MyProcess.PagedSystemMemorySize64 / 1024).ToString() + "K";
                pInfo.PagedMemorySize = (MyProcess.PagedMemorySize64 / 1024).ToString() + "K";
                pInfo.NonpagedSystemMemorySize = (MyProcess.NonpagedSystemMemorySize64 / 1024).ToString() + "K";
                pInfo.WorkingMomory = (MyProcess.WorkingSet64 / 1024).ToString() + "K";
                pInfo.VirtualMemorySize = (MyProcess.VirtualMemorySize64 / 1024).ToString() + "K";
                return pInfo;
            }

    .......

    当出现应用程序错误的时候,把线程错误日志,以及线程性能日志,全部插入到数据库中去。

    问题描述:
    如果这份程序是winform程序,或者用F5进行调试。则没有任何问题。
    但如果放在ASP.NET+IIS站点中执行的时候,会报如下错误:

    MyProcess.TotalProcessorTime = “MyProcess.TotalProcessorTime”引发了“System.ComponentModel.Win32Exception”类型的异常。其中NativeErrorCode为5

    根据帮助,我查询了Win32 Error Codes
    具体参见:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/debug/base/system_error_codes.htm
    发现错误描述为ERROR_ACCESS_DENIED 5 Access is denied.

    问题:
    我想知道,在ASP.NET + IIS 组成的站点中,想实现我这样的性能监视功能,我应该怎么进行IIS的设置?或者说,怎么该我的程序?
  • 相关阅读:
    阿里云云计算认证ACP模拟考试练习题10套:第1套模拟题分享
    as3+java+mysql(mybatis) 数据自动工具(二)
    自动化登录账号密码并截图保存
    自动化读取csv文件
    自动化读取磁盘文件并逐一在百度上面进行搜索
    自动化打开百度搜索
    python自动化--数据驱动(从文件中提取)
    pycharm 命令行方式
    软件测试工程师 总结
    八大元素定位代码
  • 原文地址:https://www.cnblogs.com/captain_ccc/p/1517409.html
Copyright © 2011-2022 走看看