Several months (maybe even a year or two) ago, I saw an asp .net article that showed how to tell how many people were connected to a running web application. Of course I only glanced over the article & didn't save it. Does anyone remember seeing the article or know where I can find it or perhaps something like it? I have searched Google from the best of my memory of the title & content but I'm getting no hits.
The reason I'm asking is because I have a WCF web service that has crashed several times after I publish updates and the only thing I can think that would cause these weird problems is that people are connected to it & its corrupting the files. I'm not going to publish any more updates during the day now, but we also have a couple of people that work during the night and it would be nice to see if people are connected or not before "flipping the switch".
Any help would be greatly appreciated...
Thanks,
Wali
The following article shows how you can use Session_Start and Session_End of the Global Application Class to count the number of active sessions:
How to show number of online users / visitors for ASP.NET website?
In your search, consider using keywords like
perfmon asp.net sessions
Intel has a good article. Unfortunately, it's 404 at the moment, but Google cache has a nice copy. Original link to the Intel "Using perfmon to tune n-tier .NET applications"
When your WCF service crashes, there are likely to be entries in the Windows event log. If not, then the service should be doing logging on its own. I suggest you look and find out whether the service may not have been telling you wnat's wrong.
Related
I recently got into a project where I need to support for two mobile applications build using asp.net.
Can anybody share the jobs need to do in maintaining those projects ?
Thanks.
Nilesh
I think you may consider the following points while you are doing maintenance projects :
1) You should talk to your manager and make them understand that you are overloaded and you can't do effective work if everyone keeps bombarding you with requests which they want fulfilled immediately.
2) You should keep tracking on what you have done and how.
3) Keep backups regular basis of all the tasks you have completed.
4) Keep updating your manager on what task you are working and what you have understand and how you want to work/achieve this.
5) Ideally, all incoming requests should be entered into an issue tracker like JIRA or Mantis. Or at least mailed to the product owner, not you. And he/she should deal with all the complaints from the users too over "why is my request not ready yet?!", allowing you to focus on the development work.
Hope it helps you. :)
I have an ASP.NET application that is consistently using 75% - 100% of the CPU on a production server. How can I profile the application to figure out what part of the code is using up the most CPU? I have looked at a couple of different tools (Xte Profiler, EQATEC, dotTrace), but they all seem to want you to load and run the application within their tool. It seems to me that they want you to load up the application in their tool and run tests locally (not in production). I want to profile the application while it is running in production with people hitting it to see what is actually going on. Is this possible?
I am a newbie to application profiling so forgive me if I have missed something obvious or am not thinking about this correctly.
Thanks,
Corey
Sam Saffron (one of the StackoverFlow creators) has written a great command-line tool a while ago, but unfortunately has abandoned it.
A friend of mine forked the code to make it work in 2015:
https://github.com/jitbit/cpu-analyzer
(the page has a link to Sam's post explaining how to use it)
The great thing about this tool (besides "no-install required" portability, cmd-line interface, etc etc) is that APM packages like NewRelic etc only monitor http-requests. If your app has some background threads - they won't help much.
You should consider taking a memory dump on the production server while it's experiencing high CPU. Check out ADPlus and taking a hang dump on the asp.net process. This can then be analyzed with Windbg or other tools.
I just went through a similar experience where our production servers were experiencing excessive CPU load - a scenario we could not recreate locally or in test/staging environments. It had nothing to do with the database (database CPU was normal). Analyzing the dump file is what clued us in on what was causing the problem (excessive compilation of regex objects by some library we were using).
This answer would be incomplete without Tess' blog, so here's the link.
My guess it has to do with long running database queries rather than the ASP.net application itself. In my experience 9 times out of 10 this is what I see and this takes the APPLICATION server down to a crawl as resources are consumed and the app has to wait for each query to finish to move on. Take a look at SQL profilier on the DB server and see if there are any queries that are taking a long time to execute.
It could be as simple as adding an index to a column or some other small minor optimizations. Once you know the query, you can then also go back to your code and tweak that section as well.
For those who stumble upon this question still, it really depends on what you are trying to accomplish.
If a server is running that high on CPU, odds are, a standard profiler will bring it to a grinding halt due to it's additional overhead.
There are actually three different types of profilers. Standard profilers, lightweight transaction profilers, and APM tools. You can read more about this in my blog post that discusses all 3:
.NET Profilers: 3 types and why you need all of them
It's certainly possible to profile ASP.NET with the EQATEC Profiler. See:
Profiling ASP.NET websites with EQATEC Profiler
EQATEC Profiler instruments your app in a separate step that enable the app itself to collect it's own profiling info, and the profiler then merely displays that timing data afterwards.
That means that you can run your instrumented ASP.NET app completely independent of the profiler itself.
You could e.g. instrument your app, mail it to your test site in India, have them run it on their server for some days where it will generate timing reports all on it's own, and have them mail back those reports to you, which you can then view in the profiler. Pretty neat.
Note: To have the profiled app generate timing snapshots "on it's own" it must know when to generate them. By default this is when the method Application_End is called in an ASP.NET app. You can programmatically dump snapshots when it suits you by using the EQATEC Profiler API. See the user guide or check out this thread.
You can read about this on Microsoft Developer Network.
You can select documentation according to the version of your Visual Studio. You should verify profiling functionality is provided for your Visual Studio type.
How to: Profile a Web Site or Web Application Using the Performance Wizard
Your best bet is to profile your code on your own machine to identify where it is spending time.
Grab a ten day free trial of this:
http://www.jetbrains.com/profiler/
Here are some links to get you going:
Link
http://msdn.microsoft.com/en-us/library/ms178643(v=VS.100).aspx
http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx
While the economy has been in the shitter, I've written possibly the most coolest site EVER for unemployed developers looking to buzzword-ify their resumes. (Don't hate the player, hate the game.)
The only problem is, it needs a scheduled task to run once a day to do some data mining. I spent many, many hours a few months ago researching solutions, but nothing seemed sure-fire.
If I have shared hosting and cannot remote in (e.g. mstsc and create a Schedule Task), how can I create a task that will run once a day on the backend of an ASP.NET website?
After all the research I did, I don't think it's possible. Per my last analysis, someone has to visit the site at least once a day to instantiate an instance of HttpApplication.
Does anyone have any solution to making sure an operation runs automatically, no matter whether anyone visits the site, and without anything but FTP access to the website?
Like I said, I've done A LOT of looking into this in the past, and it didn't seem possible. IF YOU HAVE EXPERIENCE implementing a solution, please, contribute your advice! But not postulating or conjecturing needed--it's far more nuanced and difficult than you're surely imagining.
I had a similar problem. I wrote a cheap utility that issued a web request from my desktop to my web app on a regular schedule.
How To: Send Data Using the WebRequest Class
You could have a look at Quartz.NET for scheduling jobs.
DotNetNuke which is a popular open source .net content management system does this. You can download the source and see exactly how they did it.
I agree with HackedByChinese, but if you don't want to run it from your desktop, you could get something like http://aremysitesup.com/ to ping your site for you.
Can you schedule a task in SQL Server that could call a CLR function? Your hosting provider may not allow either ot both of those, but if they do, then you are golden.
You can use ATrigger scheduling service. A .Net library is also available to create scheduled tasks without overhead.
You can set to call your datamining URL every 1day.
Related example: http://atrigger.com/docs/wiki/17/use-case-delayed-processing
Benefits:
Reporting
Error Log
Tasks List
Great Timing Features
Disclaimer: I was among the ATrigger team. It's a freeware and I have not any commercial purpose.
Does anyone know how to get to work the authentication mechanism configured using Web Site Administration Tool under Linux running Mono? Is it even possible?
I don't think you're going to find a ton of support for this, evidenced by the lack of activity on your question. The Web Site Administration Tool was removed from CodePlex around April 2009 due to inactivity (CodePlex rules state: It must be an ongoing project (no "abandoned" projects)) and it's use/adoption really declined. Many projects that were using it as a component just wrote their own after that.
There have been a few alternatives that have popped up in the community after it went missing:
Rolling Your Own Website Administration Tool
Create Your Own Web Site Administration Tool in ASP.NET
I think using code from one of those two projects is going to come as close to what you're after as is available. It's not ideal and will require some work to get working with the back-ends you desire (both of those use a SQL server back-end). I know this answer sucks, but sometimes that's the answer. I hope someone comes and proves me wrong and that what you want is out there, or at least could provide the WSAT source code as it last was on codeplex...that's be a huge head start in getting it to run.
If you're referring to a different WSAT please comment and correct me....it's such a generic term really, but that was by far the most popular one so I based this answer on that.
You have to set up your database schema manually for Membership/Roles support if using Mono. That said, following the FAQ answer (which I have found very handy in the past) alone may not be enough, I am not sure about the other dependancies for the Web Site Administration Tool itself (e.g. any .NET specific libraries it needs) but combined with an appropriate membership provider configured in system.web I'd say there is a reasonable chance it may.
If that doesn't work for you, I would second Nick's suggestion of taking a look at the solution by 4GuysFromRolla.com who have a lot of good info relevant to both .NET & Mono.
I think many developers know that uncomfortable feeling when users tell them that "The application is slow (again)."
In a complex web application there can be many possible reasons for a degradation in (perceived) performance: slow database response, bandwidth issues, bad caching etc. There certainly are issues which will never occur in a development or staging environment.
Now my question:
Is there a set of tools and/or methods which would provide a comprehensive "live" state on a IIS/ASP.NET/SQL Server production system in a visually way (not just performance counters):
Current HTTP requests (say the last n minutes)
Exceptions / timeouts
Bandwidth data
Number of open database connections / database calls
...
The primary goal is to see at a glance (or after looking closer) what problem is causing the performance problems.
I think the category of software you're looking for is ".net profiler" or ".net tracer". One such tool that you might consider is JetBrains' dotTrace. It gives you runtime stack traces and an array of counters that indicate possible bottlenecks.
Previously mentioned tools will certainly work. At our shop we needed finer information and built our own solution (long story: it was easier to code than to argue about tools and retrievable data).
I used LogParser to flip through the IIS logs and create output reports of those logs (e.g. result code breakdowns etc).
I used a combination of performance counters and WMI values to get the rest - you can read these using some pretty straightforward C# - this gives you full control that you can then dump to .csv etc for viewing/processing in excel or if you are updating a page as a control center.
I would probably also look at IIS.net as a great resource for IIS tools including debugging, security etc.
I followed urig's advice and found this software called SmartInspect.
Does anybody know this logging/monitoring tool? It seems to be a combination of real time console and developer library.
CLR 4.5 will have some new capabilities that will help you monitor ASP.NET performance live - without restarting your app. Basically you can re-JIT your code to include some monitoring-hooks in it, and then inspect time spent in classes/methods etc.
I'm sure dotTrace and other profiling tools will leverage this automatically, but it's worth checking out: C9 - Inside Re-JIT with David Broman