Supporting applications with
Nginx, OpenResty, LuaJIT, C/C++ and many more
Up to 90% reduction in CPU usage
Up to 90% memory footprint reduction, less than 5 minutes to locate memory leaks
Capable of 80% reduction in disk I/O saturation and latency
As much as 90% reduction in response latency and timeout errors
Capable of 10x boost to maximum concurrency level
When we providing our service, especially when providing consulting service per agreement with customers, our expert team will collect and analyze the data of various dimensions collected by the XRay agent on the client, and quickly locate the problems with the greatest impact by using various tools written in Y language, and give suggestions for optimization and improvement. Click the button below or the image on the right hand to see more example reports.
For target machine systems which newly install the OpenResty XRay™’s Agent service, the waiting time for the first graphs and analysis results will only be tens of seconds or 1 minute. All subsequent data updates will take merely a few seconds, achieving the level of soft real time.
Automatically learns normal performance and formulates benchmarks. OpenResty XRay™ can penetrate through multiple layers in a running software system, and can analyze all these layers as a whole. Typical layers include operating system kernels, network stacks and network layers, various systems software (like database systems), virtual machines and runtime for high level programming languages, higher level user applications and scripts written in high-level programming languages, and etc.
OpenResty XRay™ can treat any running software processes as a database that can be directly queried and is changing at realtime. It provides various different ways to query such special “databases”, enabling the user to fetch any internal data and statistical metrics from inside her running programs at any time, regardless of the target programs. OpenResty XRay™ will also provide a SQL-like query language to make it feel more like a real relational database management system (RDBMS).
OpenResty XRay™ can analyze a single service process (or daemon) which runs for a long time through its PID. It can also analyze a full UNIX process group (consisting of a parent process and multiple child processes, for example). Finally, all short-lived processes launched from a single executable file can also be analyzed as a whole.
OpenResty XRay™ provides a rich set of visualization methods to help the user get insights and intuition into her target software systems. For instance it uses different kinds of flame graphs to show how a particular hardware resource (like CPU time, blocking or locking time, and file I/O time) is distributed across all the code paths in the target program quantitatively. Additionally, multi-layered pie graphs, directed acyclic graphs and etc are used to show usage details of computer memories and other resources.
OpenResty XRay™ has built in a powerful real-time inference engine and a rich set of software knowledge base. It can analyze and find many common configuration mistakes or suboptimal bits, API usage mistakes and suboptimal places, as well as security vulnerabilities in various kinds of open source software. The inference engine will intelligently decide when to use which analyzer to collect what kind of data from the target software system, based on each step’s results. It automatically narrows down the problem with multiple steps until reaching the root cause of the problem. Many times, the engine is able to provide concrete suggestions for the user to improve, fix, and optimize her software systems.
OpenResty XRay™ is based on our world-leading dynamic tracing technologies. It does *not* require any collaborations of the target software, not relying on any special mechanism or interfaces provided by the target. The target can be any program the user has access to, including those written from scratch by the user herself. OpenResty XRay™ can analyze programs written in different kinds of programming languages, various database systems, various desktop applications, and even operating system kernels.
OpenResty XRay™ only incurs some overhead during the sampling time window. This overhead is usually less than 5% even for extremely performance applications under extreme load. For common applications, such overhead is too small to measure. And when OpenResty XRay™ is not sampling, the overhead is strictly zero for the target software processes.
OpenResty XRay™ does not rely on the target software to produce any log data. In fact, even when the target program produces no logs at all, OpenResty XRay™ can still perform all its analysis and inspection. The amount of data collected and transferred by the OpenResty XRay™ Agent service is also very low, taking very little bandwidth usually. This is because the Agent only collects the data it actually needs for the current problem or analysis goal. It never attempts to collect more data.
OpenResty XRay™ never injects into the target process any bytecode or code in any other forms. It never changes any data, execution state, or memory state inside the target process, making sure that it will never affects the target process’s behavior in any way. For this reason, it can even analyze and diagnose deep bugs in the programming language runtime, virtual machine, and Just-In-Time compilers without affecting the reproducibility of any bugs in action.
OpenResty XRay™ makes sure the target process is always read only to its analyzers and data collectors. Even if the analyzers attempt to read any memory pages inside the target process space which may lead to “page faults” or “segmentation faults”, they will never really trigger any page faults or segmentation faults at all, but simply fail gracefully. This ensures that the target process will never crash accidentally or incur any other behavioral issues just in the presence of the analyzers.
The target processes being analyzed will not know that they are being analyzed, especially when they are running in some kind of “containers” or virtual machines. This makes sure that those malicious target processes cannot intentionally change their behaviors by detecting the presence of any analyzers (they do this just to bypass security scans).
OpenResty XRay™ supports user-defined analyzers and data collectors. It provides various domain-specific languages including the Y language for user extensions and customizations. In fact, OpenResty XRay™’s own standard analyzers and data collectors are written in exactly the same languages and tool chains.
It is only required to install the OpenResty XRay™ Agent software package to analyze all the services, applications, and containers in the target machine. The Agent software package is so small that it is merely of several megabytes. The user can then check out and manage all her target machines’ details in OpenResty XRay™’s console web UI. All the OpenResty XRay™ software packages are distributed and managed by the standard package management systems of the user’s operating system (like yum and apt-get). Therefore, upgrading and removing the software is extremely easy.
The OpenResty XRay™ Agent services installed on the host operating system can easily penetrate and analyze any applications run in containers like Docker’s. It is not required to install any extra software or files inside the target containers. In the near future, OpenResty XRay™ will also support penetrating and analyzing applications inside virtual machines powered by KVM or VirtualBox.
Trust is the building block of every enduring partnership
OpenResty® undergoes rigorous audits by third-party services - our protocols are transparent, documented and verified
Ylang: Universal Language for eBPF, Stap+, GDB, and More (Part 4)
Ylang: Universal Language for eBPF, Stap+, GDB, and More (Part 3)
Ylang: Universal Language for eBPF, Stap+, GDB, and More (Part 2)
Ylang: Universal Language for eBPF, Stap+, GDB, and More (Part 1)
Introduction to Lua-Land CPU Flame Graphs
Memory Fragmentation in OpenResty and Nginx's Shared Memory Zones
How OpenResty and Nginx Shared Memory Zones Consume RAM
The Wonderland of Dynamic Tracing (Part 4 of 7)
This is Part 4 of the series “The Wonderland of Dynamic Tracing” which consists of 7 par...
The Wonderland of Dynamic Tracing (Part 3 of 7)
The Wonderland of Dynamic Tracing (Part 2 of 7)
The Wonderland of Dynamic Tracing (Part 1 of 7)
How OpenResty and Nginx Allocate and Manage Memory
The LuaJIT GC64 Mode
We use cookie to make your experience better. By clicking 'I agree' or continuing to use this website you're giving permission for cookies to be stored.