This is an amazing post by Wenlong giving you a full walkthrough of how we generally go about debugging a performance problems.
One of the key takeaways from this is the emphasis of client settings in your service. These are as important on a server as it is on the client side when you have a middle tier. You have to keep in mind that the middle tier becomes the client for your back end service and all client settings and behaviors apply to your proxy in the middle tier including things like channel caching etc. The below diagram shows you one setting that is most commonly forgotten when we try to perform common tasks like
- Load testing your service (no middle tier)
- Load testing your backend service with a Middle tier which needs to saturate your back end process.