asp.net mvc pdf viewer control : C# merge pdf files control software platform web page winforms asp.net web browser mongodb_%20the%20definitive%20guide%20-%20kristina%20chodorow_140136-part1782

etc.), but the log does not take up too much space. If you are debugging a specific issue
with your application, there are a couple options for getting more info from the logs.
First, you can change the log level, either by restarting MongoDB with more v’s or
running the setParameter command:
> db.adminCommand({"setParameter" : 1"logLevel" : 3})
Remember to turn log level back down to 0, or your logs may be needlessly noisy. You
can turn log level up to 5, at which point mongod will print out almost every action it
takes, including the contents of every request handled. This can cause a lot of IO as
mongod writes everything to the log file, which can slow down a busy system. Turning
on profiling is a better option if you need to see every operation as it’s happening.
By default, MongoDB logs information about queries that take longer than 100 ms to
run. If 100 ms it too short or too long for your application, you can change the threshold
with setProfilingLevel:
> // Only log queries that take longer than 500ms
> db.setProfilingLevel(1500)
"was" : 0"slowms" : 100"ok" : 1 }
> db.setProfilingLevel(0)
"was" : 1"slowms" : 500"ok" : 1 }
The second line will turn off profiling, but the value in milliseconds given in the first
line will continue to be used as a threshold for the log (across all databases). You can
also set this parameter by restarting MongoDB with the --slowms option.
Finally, set up a cron job that rotates your log every day or week. If MongoDB was started
with --logpath, sending the process a SIGUSR1 signal will make it rotate the log. There
is also a logRotate command that does the same thing:
> db.adminCommand({"logRotate" : 1})
You cannot rotate logs if MongoDB was not started with --logpath.
Logging | 339
C# merge pdf files - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
add pdf together; merge pdf online
C# merge pdf files - VB.NET PDF File Merge Library: Merge, append PDF files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET Guide and Sample Codes to Merge PDF Documents in .NET Project
reader combine pdf; reader combine pdf pages
Online Merge PDF files. Best free online merge PDF tool.
Thus, C#.NET PDF document merge library control can be counted as an efficient .NET doc solution for keeping PDF document files organized. Download Free Trial.
pdf merger; append pdf files reader
C# PDF File Split Library: Split, seperate PDF into multiple files
outputFiles); Split PDF Document into Multiple PDF Files in C#. You can use the following C# demo to split PDF document to four files.
pdf combine files online; acrobat split pdf into multiple files
CHAPTER 21
Monitoring MongoDB
Before you deploy, it is important to set up some type of monitoring. Monitoring should
allow you to track what your server is doing and alert you if something goes wrong.
This chapter will cover:
• How to track MongoDB’s memory usage
• How to track application performance metrics
• How to diagnose replication issues
Examples use chapters from the Mongo Monitoring Service (MMS) to demonstrate what
to look for when monitoring. There are installation instructions for MMS at https://
mms.10gen.com. If you do not want to use MMS, please use some type of monitoring.
It will help you detect potential issues before they cause problems and let you diagnose
issues when they occur.
Monitoring Memory Usage
Accessing data in memory is fast and accessing data on disk is slow. Unfortunately,
memory is expensive (and disk is cheap) and typically MongoDB uses up memory
before any other resource. This section covers how to monitor MongoDB’s interactions
with disk and memory, and what to watch for.
Introduction to Computer Memory
Computers tend to have a small amount of fast-to-access memory and a large amount
of slow-to-access disk. When you request a page of data that is stored on disk (and not
yet in memory), your system page faults and copies the page from disk into memory. It
can then access the page in memory extremely quickly. If your program stops regularly
341
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
How to Use C#.NET Demo Code to Convert PDF Document to HTML5 Files in C#.NET Class. Add necessary references: RasterEdge.Imaging.Basic.dll.
pdf merge documents; pdf merge comments
C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
toolkit, C# developers can easily and quickly convert a large-size multi-page PDF document to a group of high-quality separate JPEG image files within .NET
c# merge pdf files into one; acrobat combine pdf files
using the page and your memory fills up with other pages, the old page will be evicted
from memory and only live on disk again.
Copying a page from disk into memory takes a lot longer than reading a page from
memory. Thus, the less MongoDB has to copy data from disk, the better. If MongoDB
can operate almost entirely in memory, it will be able to access data much faster. Thus,
MongoDB’s memory usage is one of the most important stats to track.
Tracking Memory Usage
There are several “types” of memory MongoDB reports using. First is resident memo‐
ry: this is the memory that MongoDB explicitly owns in RAM. For example, if we query
for a document and it is paged into memory, that page is added to MongoDB’s resident
memory.
MongoDB is given an address for that page. This address isn’t the literal address of the
page in RAM. It’s a virtual address. MongoDB can pass it to the kernel and the kernel
will look up where the page really lives. This way, if the kernel needs to evict the page
from memory, MongoDB can still use the address to access it. MongoDB will request
the memory from the kernel, the kernel will look at its page cache, see that the page is
not there, page fault to copy the page into memory, and return it to MongoDB. The
pages of data MongoDB has addresses for is how MongoDB’s mapped memory is cal‐
culated: it includes all of the data MongoDB has ever accessed. It will usually be about
the size of your data set.
MongoDB keeps an extra virtual address for each page of mapped memory for jour‐
naling to use (see Chapter 19). This doesn’t mean that there are two copies of the data
in memory, just two addresses. Thus, the total virtual memory MongoDB uses will be
approximately twice your mapped memory size (or twice your data size). If journaling
is disabled, mapped and virtual memory sizes will be approximately equal.
Note that both virtual memory and mapped memory are not “real” memory allocations:
they do not tell you anything about how much RAM is being used. They are just map‐
pings that MongoDB is keeping. Theoretically, MongoDB could have a petabyte of
memory mapped and only a couple of gigabytes in RAM. Thus, you do not have to
worry if mapped or virtual memory sizes exceed RAM.
Figure 21-1 shows the MMS graph for memory information, which describes how much
resident, virtual, and mapped memory MongoDB is using. On a box dedicated to Mon‐
goDB, resident should be a little less than the total memory size (assuming your working
set is as large or larger than memory). Resident memory is that only statistic that actually
tracks how much data is in physical RAM, but by itself this stat does not tell you much
about how MongoDB is using memory.
342 | Chapter 21: Monitoring MongoDB
C# PDF Convert to SVG SDK: Convert PDF to SVG files in C#.net, ASP
file using C#. Instantly convert all PDF document pages to SVG image files in C#.NET class application. Perform high-fidelity PDF
.net merge pdf files; combine pdf online
C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net
content of target PDF document can be copied and pasted to .txt files by keeping original layout. C#.NET class source code for converting each PDF document page
pdf merge files; break pdf file into multiple files
Figure 21-1. From the top line to the bottom: virtual, mapped, and resident memory
If your data fits entirely in memory, resident should be approximately the size of your
data. When we talk about data being “in memory,” we’re always talking about the data
being in RAM.
Tracking Page Faults
As you can see from Figure 21-1, memory metrics tend to be fairly steady, but as your
data set grows virtual and mapped will grow with it. Resident will grow to the size of
your available RAM and then hold steady.
You can use other statistics to find out how MongoDB is using memory, not just how
much of each type it has. One useful stat is number of page faults, which tells you how
often the data MongoDB is looking for is not in RAM. Figure 21-2 and Figure 21-3 are
graphs page faults over time. Figure 21-3 is page faulting less than Figure 21-2, but by
itself this information is not very useful. If the disk in Figure 21-2 can handle that many
faults and the application can handle the delay of the disk seeks, there is no particular
problem with having so many faults (or more). On the other hand, if your application
cannot handle the increased latency of reading data from disk, you have no choice but
to store all of your data in memory (or use SSDs).
Monitoring Memory Usage | 343
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
C#.NET extract image from multiple page adobe PDF file Extract various types of image from PDF file, like JPG, JPEG and other high quality image files from PDF
pdf mail merge plug in; add pdf together
C# PDF Text Extract Library: extract text content from PDF file in
image files. Enable extracting PDF text to another PDF file, TXT and SVG formats. Support extracting OCR text from PDF by working with XImage.OCR SDK. Best C#.NET
best pdf merger; pdf combine
Figure 21-2. A system that is page faulting hundreds of times a minute
Figure 21-3. A system that is page faulting a few times a minute
Regardless of how forgiving the application is, page faults become a problem when the
disk is overloaded. The amount of load a disk can handle isn’t linear: once a disk begins
getting overloaded, each operation must queue for a longer and longer period of time,
creating a chain reaction. There is usually a tipping point where disk performance begins
degrading quickly. Thus, it is a good idea to stay away from the maximum load that your
disk can handle.
Track your page fault numbers over time. If your application is behaving well with a
certain number of page faults, you have a baseline for how many page faults the system
can handle. If page faults begin to creep up and performance deteriorates, you have a
threshold to alert on.
You can see page fault stats per-database by looking at "recordStats" field of server‐
Status’s output:
> db.adminCommand({"serverStatus" : 1})["recordStats"]
{
"accessesNotInMemory": 200632,
"test": {
344 | Chapter 21: Monitoring MongoDB
"accessesNotInMemory": 1,
"pageFaultExceptionsThrown": 0
},
"pageFaultExceptionsThrown": 6633,
"admin": {
"accessesNotInMemory": 1247,
"pageFaultExceptionsThrown": 1
},
"bat": {
"accessesNotInMemory": 199373,
"pageFaultExceptionsThrown": 6632
},
"config": {
"accessesNotInMemory": 0,
"pageFaultExceptionsThrown": 0
},
"local": {
"accessesNotInMemory": 2,
"pageFaultExceptionsThrown": 0
}
},
"accessesNotInMemory" gives you a count of how many times MongoDB has had to go
to disk (since startup).
Minimizing Btree Misses
Accessing index entries that are not in memory is particularly inefficient, as it often
causes two page faults. There is one fault to load the index entry into memory and then
another to load the document into memory. When an index lookup causes a page fault
it’s called a btree miss. MongoDB also tracks btree hits: when an index access does not
have to go to disk. Both are shown in Figure 21-4.
Indexes are so frequently used that they are generally in memory, but if there is too little
memory, a lot of indexes, or an unusual access pattern (e.g., a lot of table scans), btree
misses may be higher. They should generally be low so if you’re seeing a lot of them,
track down the cause.
Monitoring Memory Usage | 345
Figure 21-4. A chart showing btree stats
IO Wait
Page faults in general are closely tied to how long the CPU is idling waiting for the disk,
called IO wait. Some IO wait is normal (MongoDB has to go to disk sometimes and,
although it tries not to block anything when it does, cannot completely avoid it). The
important thing is that IO wait is not increasing or near 100%, as shown in
Figure 21-5. This indicates that the disk is getting overloaded.
Figure 21-5. IO wait hovering around 100%
MMS can track CPU information if you install the munin plug-in. See their website for
installation instructions.
Tracking Background Flush Averages
One other disk metric to watch is how long it takes MongoDB to write its dirty pages
to disk, also known as the background flush average. This is a good canary-in-the-coal-
mine stat. If the background flush average starts creeping up, you know that your disk
is having trouble keeping up with requests.
346 | Chapter 21: Monitoring MongoDB
At least once a minute (by default), MongoDB will flush all writes that have happened
to disk. (Depending on the operating system, MongoDB may flush writes more fre‐
quently if there are a lot of dirty pages.) You can also configure the interval by passing
a number of seconds to the --syncdelay option when starting mongod. More frequent
syncs will make the amount of data to be synced smaller, but can also be less efficient.
A common misconception is that syncdelay has something to do with
data durability. It has absolutely no effect on durability. To ensure du‐
rability, use journaling. syncdelay is only for tuning disk performance.
Generally, you want to see background flush averages of less than a second. On a slow
disk or a busy system, this can creep up, taking longer and longer as the disk gets over‐
loaded. At some point, the disk will be so overloaded that flushes will take longer than
60 seconds, meaning MongoDB will be trying to flush constantly (which puts even more
load on the disk). Occasional spikes in disk flush times are expected. What you don’t
want to see is a trend towards tens of seconds.
Figure 21-6 shows a graph of background flush averages over time. This system’s hard
drive is working hard: it always takes it more than 5 seconds to write the preceding
minute’s data to disk. This is a bit slow, especially with the regular spikes of nearly 20
seconds, so it might be worth turning syncdelay down a bit, say to 40 seconds, and
seeing if writing less data per flush helped.
Figure 21-6. Background flush averages on a somewhat overloaded system
If background flush average creeps up beyond what is reasonable for your disks (prob‐
ably a few seconds) over a broad time period, start thinking about how you’re going to
lighten the load on your disks.
MongoDB only has to flush dirty data (that is, data that’s changed) so background flush
average will generally reflect write load. Thus, if you have a low write load, background
Monitoring Memory Usage | 347
flush average may not show that your disk is straining. You should always track IO wait
and page faults in addition to background flush average.
Calculating the Working Set
In general, the more of your data that is in memory, the faster MongoDB will perform.
Thus, in order from fastest to slowest, an application could have:
1. The entire data set in memory. This is nice to have but is often too expensive or
infeasible. It may be necessary for applications that depend on fast response times.
2. The working set in memory. This is the most common choice.
Your working set is the data and indexes that your application uses. This may be
everything, but generally there’s a core data set (for example, the users collection
and the last month of activity) that covers 90% of requests. If this working set fits
in RAM, MongoDB will generally be fast: it only has to go to disk for a few “unusual”
requests.
3. The indexes in memory.
4. The working set of indexes in memory. This generally requires right-balanced in‐
dexes (see Chapter 5).
5. No useful subset of data in memory. If possible, avoid this. It will be slow.
You must know what your working set is (and how large it is) to know if you can keep
it in memory. The best way to calculate working set is to track common operations to
find out how much your application is reading and writing. For example, suppose your
application creates 2 GB of new data per week and 800 MB of that data it is regularly
accessed. Users tend to access data up to a month old and data that’s older than that is
mostly unused. Your working set size is probably about 3.2 GB (800 MB/week × 4 weeks),
plus a fudge factor for indexes, so call it 5 GB.
One way to think about this is to track data accessed over time, as shown in
Figure 21-7. If you choose a cutoff where 90% of your request fall, then the data (and
indexes) generated in that period of time are your working set, like Figure 21-8. You
can measure for that amount of time to figure out how much your data set grows. Note
that this example uses time, but it’s possible that there’s another access pattern that makes
more sense for your application (time being the most common one).
348 | Chapter 21: Monitoring MongoDB
Documents you may be interested
Documents you may be interested