We solve performance issues and optimise your applications by analysing bottlenecks on the whole chain from user interface to application server and connected systems. In real life scenarios, end users are simply complaining that the application is slow and they can’t use the system to do their job. They are not aware (and they should not care) of application complexity, number of tiers and interconnected systems; the application should meet their expectations.
If you have an application where users already complain about performance problems or a project that is at risk or about to be canceled because of poor performance, our team will support you to recover from this situation and bring the application back on track to meet customers performance needs.
Our methodology for analyse and tuning performance applies on solutions that range from desktop applications to highly scalable web applications.
When your application is suffering from poor performance we will:
- Identify the root cause
- Produce evidence which support in deciding upon solution to be implemented. We try to avoid as much as possible an expensive or ineffective course of action
- Help you to implement the solution which resolves the performance issues
Analysis and Optimisation of All Layers
There is no single recipe for all performance problems, there are multiple causes which could lead to poor system performance. Therefore, all layers of the application will be analysed in order to find the cause(es) for performance issues followed by identification of solutions.
- Back-end application profiling – runtime profiling of back-end for CPU usage and memory allocation hotspots, high number of database queries, number of entries loaded in entity manager, etc. This helps to detect problems which needs to be solved in application source code.
- Front-end application profiling – although nowadays there is much processing power on client side, performance issues can appear on this level when rendering pages having big size, complex structure or code which takes too much time to be executed. Profiling these aspects can reveal possible issues.
- Java virtual machine (JVM) – analysis of static startup parameters and runtime resource usage anomalies is performed. We detect and configure optimal values for parameters related to memory, garbage collector (GC), cache and other configurations.
- Database server – consists in verification of resource usage and I/O performance, check of database configuration parameters, detection of slow queries. Resulting actions could be the need to optimise SQL queries, create indexes, reindex tables and/or index rebuild, change memory and cache configuration, increase I/O performance. Follow-up could be the analyse fragmentation level of your databases and tune-up space utilization, implementation of monitoring jobs so the optimization and tuning processes can be executed on a recurring basis.
- Application server / load balancer – we analyse application server configuration, database connection pool settings, logging configuration, HTTP thread pool settings and runtime usage, content compression. Misconfigurations on this layer introduces a permanent decrease in server responsiveness for all requests.
- Storage speed – Low I/O performance could have a bad impact on overall performance, specially on applications with intensive database activities. Detection and solving this issue could boost the general application performance
- Network – inadequate latency between systems will introduce significant delays and decrease application responsiveness. When detected, these issues are easy to fix.
- Other systems – Most of the time investigated application is connected with many other systems using different methods (e.g. Web services, SOAP, REST, legacy protocols). Analysis of responsiveness of these systems is an aspect which can’t be ignored.
After these checking are performed we reached the point where one or more bottlenecks were identified and we could recommend possible solutions and help with their implementation.
For some complex issues we also install basic monitoring tools to debug performance issues which appears after the application is running for a while. We had situations when performance suddenly decreased after system was running for 2 weeks.
Application Performance Management (APM)
The application is back on track now. But this does not mean a performance issues will never appear again. In order to prevent performance issues we could advise you how to install and use APM tools for continuously monitor your application and record relevant metrics for analysis of the solution. There are open source solutions like Pinpoint which can be freely used or commercial solutions for APM.
With such and solution in place, you can see your current application load, have history data for last weeks/months, but more important, you have debug information for investigating problems when customer complains that “yesterday evening the application was very slow”. You will not be in the embarrassing position to answer “we do not know what happened, please try again to see how the system bahaves now”.
Regular Automatic Tests of Application Performance
Beside APM tools, developing performance and load test suite for important business use cases is a good strategy for automatic measure of application performance on regular base.