Showing posts with label experience. Show all posts
Showing posts with label experience. Show all posts
Saturday, January 22, 2011
App pools on a saturday night
I needed to learn more about IIS 7.0 application pools since we're facing a problem about around 20 ASP.Net web applications residing in a single application pool and when we analyzed the IIS logs, it seems that one app is trying to be the smart ass by taking most of the resources. So, here is what I learned:
In IIS 7.0, you have the chance to group your apps into separate pools. By default, an application pool gets 1 worker process (w3wp.exe), but it's configurable. So, the default setting of one 1 worker process in an app pool means that all Applications/AppDomains in the pool share the same worker process.
So, then comes the question: Should I put all of my applications in one app pool, or should I separate them to different app pools? What would be the pros and cons?
Here are the facts that you should consider while making your decision:
- App pools can be configured to use different identities. So, you can restrict one app of yours one way and your other app the other way. With app pools, you can also restrict an application access to resources in another pool.
- If you separate your applications to different app pools, then you can restart one app pool without affecting the other applications running in the other pools.
- And this one is the that concerns me the most: If you have an app that is resource intensive, has memory leaks or misbehaving then you can place it in a separate app pool to ensure that it does not affect the other apps' performance. Before IIS 7.0, if an app that is hosted under IIS crashed, it would also make its host process crash, too. So now with the app pools, you can at least keep your other good behaving apps safe and sound.
About the cons of dedicated app pools, since each app pool has its own bank of memory and its own process, it can use more system resources and there's a large memory overhead in running several w3wp.exe processes. But for me, it should be measured to see whether 20 apps in one pool use more memory then 20 apps in 20 pools, or not and then come to a conclusion.
But anyways, maybe there should be nothing to rack your brain over on a saturday night. So, that should be all. Check these links if more is needed: [1] [2] [3]
Wednesday, December 22, 2010
How to not suck at a technical interview when you're the interviewer
Today we met a guy with 17 years of experience in software development processes, in a job interview. Since we were on the interviewer side, I did not think of a good question to ask him since I thought whatever I’d ask would seem funny and needless. But people on stackoverflow have shared some thoughts about it.
What they say is, you can ask them the questions that you’ve been struggling with for a long time or that you cannot come up with a good solution and see if their answers satisfy you.
One of the other recommendations is that you can ask them to explain some problems & concepts that are blurry to you and see if their answers are meaningful to you and make you understand what you want to learn clearly.
I think these are great ideas. I love SO. Really.
Projecting
I have like a total of 3-4 years of experience in software engineering and the last 1.5 of them is in my current job. Based on my last 1.5 year’s experience, here are some quality points of a software project from my point of view: (Not all of them are applicable to all types of projects, of course)
- Can log files supply the really needed information? Can it help to understand a problem without debugging? Are log files easy to collect and send to other people?
- Does the project have a simulator or some other forms of test code?
- Is there a mechanism that will infer possible problems? For example, if a module is not aware of its erroneous behaviour, is there an outside module that checks the status of some things and then decides that the implemented module is not doing its job?
- Can the module retry failed operations?
- Can the module rollback if it crashes in the middle of performing an operation? Can it revert back to a stable state, without needing to be restarted?
- Are the error messages informative to the end users? Are they able to direct the end users to right path?
- After recovery from a crash, can the module process previous data or perform previous jobs using a correct logic?
- If the module is an executable running by a scheduler, does it end after it finishes its job?
- If this executable is needed to be running just as a single instance and if a scheduler is running it, when it’s scheduled one more time before the first one finishes its job, can the second job be re-scheduled automatically?
- Are there jobs in the module that are repeated unnecessarily?
- Does the module return back the resources it had used, when it’s done?
- If there are time dependent processes, can the module perform correctly when the time zone changes?
- If the module accepts input from the outside, can it perform correctly in all kinds of character sets and encodings?
- When a process is taking long, is the end-user informed? Can the user interface stay responsive?
- Can the end-user do what he wants in the possible shortest way?
- Does the system do the maintenance of it’s output data, like database records, physical files, etc…?
- Is the required default configuration supplied with the project setup?
- Can the configurations be done through a single interface?
- Are CPU and memory usage at acceptable levels?
- Does the project balance the requirements of concurrency and integrity? Because for example, to keep a system’s data in integrity, you should use transactions or some other kinds of mechanisms. But transaction sizes are important for concurrency due to locking issues.
I’ll get back here when I add more experience to my humble portfolio :]
Subscribe to:
Posts (Atom)