You can get anything from US and believe me its easy. If you walk into some super markets like Wal-Mart or Meyers, you can get anything, from ball to bed. House hold articles are not very expensive but you can get really expensive ones too. A dinner set (4 dinner plates, 4 small plates, 4 cups and few more dishes) will cost around 60USD. An air bed will cost around 50USD while a spring bed will cost around 300USD. A bottle of milk (3 litres) will be around 2USD.
Indian Shops
Almost every city, you will find Indian shops. If you go to Chicago or Boston, you might find it a lot and if you go to some smaller cities, you might have to travel to the nearest city to find one. But, you will get everything over there from Cereals, Masala (Everest masala, Grandma masala and many more…), DVD’s for rent, Indian rice varieties, spices. So point is, you really don’t have to carry anything from India thinking that you won’t get it there. But yes, it might be a little more expensive than the normal super markets. Almost all Indian spices can be bought from super markets like Wal-Mart, Fred-Meyers and it will be cheaper compared to an Indian shop.
Driving and moving around is US is different from that of our contry. You cannot walk from one place to another (of course major metro’s and cities, walking in the busy areas are common. If you walk around in Newyork city, it reminds you of Bombay ;-) ). For the small cities, the hotels will be present mostly near a free way exit. You might have to travel to the next exit to get food or sometimes you will get at the same exit. So a car is required for all travel purpose. If you don’t have a license handy, you can always rely on cabs which can be booked over the phone. They normally takes 20 -40 mins to show up after your booking.
Rental Cars
If you want to book a rental car, you need a credit card. Some of the car rentals are www.hertz.com; www.enterprisecar.com; www.nationalcar.com;. The average rent will be around 20-30 USD per day for a small car like Toyota Corolla which does not include the Insurance. Car Insurance needs to be bought separately and I strongly advise you to buy it for first few days at least. I will write a separate blog on various insurances that you can buy for car rental. The rental cars will have automatic gear shift. So you don’t have to worry about the gear shifts. The next major difference. The cars are all left hand drive. If you have never driven in US, I would strongly advise you NOT to drive in US. You have to follow rules and rules are much different in US, major being there are rules for freeways.
Freeways
Freeways are like highways in India. I should be crazy to do such a comparison. Well, the point that I want to make is that the free ways normally connect cities, sometimes states and sometimes multiple states. I-75 goes all the way from Michigan to Florida, roughly 700 miles. Now let me tell the major rules. You are not supposed to stop your car on a freeway, unless it’s an emergency. In case of emergency, you should pull your car to the right side (if present, some places it will be left side) shoulder and never stop on the road. If you want to stop the car for taking rest, you should take the car through the nearest exit and stop at a safe place like Gas Station, Eat outs etc. Yes, there will nothing on the freeways; you should take the exit roads to fill gas, to eat out, to take rest and to stop the vehicle for driver changing and for anything that involves stopping the car. Every exit will have a number like Exit 169. Before the exit, all the facilities available at the exit will be posted on the freeways. Normally, for every exit, there will be an adjacent entry where you can get back to the freeway. Some places it may not be the case and it will be mentioned at the exit. So the general flow is, take an exit, do whatever you want and then join back the freeway at the entry.
There are speed limits posted on the road and it should be followed. You will be ticketed by the cops if you exceed the speed limit and sometimes if you don’t maintain the minimum speed limit. There are some rules specific to states and you should read the rules before travelling in that state. You will be ticketed by the cops if you don’t follow rules, whether you are aware or not. The freeways will have multiple lanes and shifting between the lanes should be done carefully. So please do read the rules, it’s important and it’s very much different from driving in our country.
It’s pretty easy to get a stay arranged in US. All the reservation to the Hotel can be done through online reservation systems. You will have to use your credit card to do the reservation. Few of the hotels are www.marriot.com; www.choicehotels.com; Please do the reservation in advance. The reservation can be canceled in most of the places till 24 hours before the start date of the stay. However check the policies before doing the reservation. Having said that, you should probably try to get a stay arranged at your friends place because that makes it more comfortable stay J. Another point to remember is that most of the hotels will have only breakfast (some of them give it free). This information will be available in the website itself and it changes from hotel to hotel. For other times in the day, you will have to go to near by places for food.
House for Rent
Houses are available for lease. The duration of lease will be anywhere up from 6 months. This means that you sign a contract with the leasing company for a stipulated period of stay. The rent will be fixed while signing the contract for the contract period. For smaller cities, the rent will be 700 USD for single bed room apartments and for bigger cities it can go higher. If you know that you are going to stay there for a longer duration , you can think of signing lease for longer duration to lock down the rent. The leasing company increases the rent every time you renew the lease. You can break the lease by paying a lease breakage fee. This should be mention in the contract. It can be amount equaling to a month or 2 month rent. Mostly the houses or apartments will be owned by a leasing company. You can search for lease availability in your area in www.rent.com. Whenever you get into lease agreements, look out for discounts, some places have move in specials like first month rent free, few amount off from first month rental etc. You can expect partially furnished apartments in most cases which might include a fridge, dishwasher, washing machine and a dryer, microwave, heater and air conditioner. But, this varies from apartment to apartment. Some places will have laundry unit as part of your apartment while some will have it as a common place. If you are going to cold areas like Michigan, check if you have a good heater in the unit. The temperature can go as low as -20F outside and you need good heaters to maintain the room temperature. Some apartments give heating power as free and it’s really worth if you can get this offer. Also check with your colleagues if they can help, the leasing contracts are flexible and it can be changed, but once signed, it cannot be changed. After completing a fixed lease term, you can either extend the lease for another lease term or go for a month to month contract.
Traveling to US for the first time will bring in too many questions to mind, what to carry, what I can get there etc, where should I go etc ….This blog represents my view only and I would advice your discretion while following the blog.
Why should there be a webserver when the Application Server has an inbuilt Web-container? WAS (Websphere Application Server) has a web container that can respond to http requests. It can serve the same purpose of a webserver. It can deliver static content; it can deliver the servlets and JSPs.
Why do we need a webserver in between the client and the application server? The benefits are listed below and they are listed not as per the importance. The importance can vary based on the potential uses.
1. Load Balancing is easier with Webservers in place. All the requests from the client can be redirected to various Webservers available and the webserver can redirect it to the necessary application servers depending on the load on the application servers. 2. Static content like html, images can be served by the webserver itself. This will increase the performance of the application as a round trip to the application server is not required to display the static content. 3. Application server security is preserved as all direct access to the application servers can be blocked. If the list of Webservers and their ports are known which will request data from the application server, only those servers can be enabled to redirect the request to application server. For e.g.: If the virtual host aliases mention that it will accept request from server1 and port 8090, only the request coming from server1 will be accepted by the application server. Other requests will not be rejected by the application server. 4. It’s easy to configure the authentication mechanisms in the webserver and safer to do so. If the user is invalid, the application server, where the business components reside is not approached and hence more secure.
In the remaining document, the steps required to configure IBM HTTP Server to work with WAS is detailed. The steps that need to be followed are outlined below.
1. Install the Websphere Application server (Base/Express/ND). 2. Install IBM HTTP Server. Only few Webservers are supported by WAS in webserver-application server communication. For e.g. Apache Webserver, IBM HTTP Server, Sun One Webserver. Refer to IBM documentation to do this. 3. Download and install the plug-in for Websphere-Webserver communication. The detailed steps are described below, assuming that the WAS and the Webserver are installed on the same machine. For remote setup, the scripts need to be copied over to the application server and it should be executed separately. 1. Run the install.exe in the machine where the Webserver is installed. 2. Select the license terms and then select what type of Webserver will be used. Only the webserver type selected will be configured but the plug-in for all supported Webservers will be installed. 3. Select if the Webserver follows a Local or Remote Topology. If the Webserver and the Application server exist on different machine, select Remote otherwise select Local. 4. Local Setup 5. Select the path where the plug-in should be installed. It will be typically “C:\Program Files\IBM\HTTPServer\Plugins”. You can select any other directory but preferably within the Webserver installation path. 6. Select the Application Server Root. e.g: “D:\Program Files\IBM\WebSphere\AppServer” 7. Select the configuration file for the WebServer. For IBM HTTP Server, it will be “C:\Program Files\IBM\HTTPServer\conf\httpd.conf”. Select the Webserver port. This would have been set by you during the Webserver installation. (If you don’t remember, read the conf file of the Webserver file and search for the word “Listen”. The port number will be placed adjacent to it.) 8. Select a Webserver profile name; it just needs to be unique. This name will be shown in the Administrative console of WAS. 9. The program will display the plug-in file name for the Webserver. This ends the selection process and the next button will install the plugins. 10. The plug-in will be installed for the default profile of the application server. 11. A script will be created in the “?webserver path?/plugins/bin” folder with the name “configure?Webserver Profile name selected in Step h?.bat 12. Copy the bat file to the “?was_install_root?/bin” folder and preserve it. This script can be used to create the webserver profile in the application server if required. 13. In the Administrative Console, you can find a Webserver profile created by the name given in Step h. 14. Remote Setup 15. For remote setup, execute the bat file as mentioned in Step l. 16. Restart the application server and the webserver 17. The installation will be complete.
For testing the installation process, try accessing the below URL. The request goes to the webserver and since the servlets is not present in the Webserver, the request will be redirected to the application server. (If it does not work, ensure that webserver name and webserver port is added in the host alias for the webhost in the application server. Ensure that the plug-in file is generated in the application server and propagated to the webserver too)
Wayanad can be reached from different cities but all of them are by road.
Bangaloreà Wayanad (6 hours)
Coimbatore (via Gudallur) à Wayanad (6 hours)
Calicutà Wayanad (3 hours)
Wayanad is best reached by taking a road trip from Calicut, which is 70KM from Wayanad. Calicut has an InternationalAirport and Railway Station which gives connectivity to major metros like Chennai, Mumbai, Delhi etc .. Since Wayanad is in Kerala, there are no additional tourist taxes to be paid for the tourist vehicles, which is pretty high for other state tourist vehicles.
There is no particular place called Wayanad, it’s the name of the district and hence it’s virtual in nature. Wayanad has 3 main towns, Kalpetta (district capital), Sultan Battery, and Manathavady. The place is known for its waterfalls and the climate. The temperature is around 20-25C for most of the year except for March till May.
The places of Interest
Edakkal caves – It’s a trekking route with Edakkal cave at the culmination. There is a stone hanging in between 2 rocks. The entry to the cave is restricted till 4:30PM in the evening. 25Kms from Kalpetta.
Menumutty Waterfalls – The water fall is at the end of a forest trekking route. The trek route is very slippery during rain and considered dangerous. You can take bath at this waterfall when the water level is low. 20Kms from Kalpetta.
Soochipara Waterfalls – You can take bath at this waterfall. You ought to be careful during rainy season as the water level increases very abruptly. The road to the water fall is more of curves and should be careful while driving. 20Kms from Kalpetta.
Banasura Dam – You can see the dam and enjoy boating at this place. It’s good for photo shoot and is a ideal to visit during sunset. 25Kms from Kalpetta.
Muthanga Forest Reserve- If you are interested in watching the wild animals on the move, Muthanga wild life sanctuary is a good place to visit. You can travel inside a Jeep (provided by the forest dept) through the designated paths. Evening times are good for watching animals as they come to drink water.
PookodeLake – This Lake is on the way from Kalpetta to Calicut. You can enjoy boat ride at this lake.
Bandipur National Reserve- Short travel from Wayanad. It’s a national park which is famous for the wild elephants. There is accommodation available inside the forest (you need to do advance reservation for this).
Ooty and Mysore are the tourist spots to which you can drive as part of your trip. It’s almost 100Kms away from Wayanad.
General Tips
Ideal place to stay is Kalpetta or Meppady. Most of the tourist spots are near to these towns.
It’s a good idea to try for resorts if you are in a family or a manageable group (approx 10). Resorts charge Rs.1500 to Rs 3000 per night stay for a family.
You can also explore home stays. This is a good idea if you are visiting for a calm stay. I’m not really sure about the rates.
Tourist homes are good options too, if you are interested only in sight seeing. It’s cheap and affordable. Typical rates are Rs. 250 per person/night (4 sharing room)
Try to arrange food at the resort itself in case you are staying in the resort as outside food is difficult to find.
Nature lovers have an option of taking a dormitory in Muthanga wild life sanctuary. You are not allowed to have camp fires or loud noises. Occupancy is Rs. 80 per person per night. It has all the necessary amenities. You will not get hot water or towels or soap or any thing for that matter. You are anyways allowed to carry it with you.
The nearest city is Calicut. If you are traveling by train, you should allot at least 5 hours travel time to Calicut (by tourist bus, 3 hours by car).
Hope this article about Wayanad was helpful. You can leave your comments here.
Data is the most important part of any organization. So the organization takes care in preserving the data by all means. The daily data is backed up. The data is also backed up into tapes and the tapes are stored in a distant location. In case of any data center disaster, the data is recovered from the alternate location. These solutions works in recovering the data till the last backup was performed. Many verticals like banks would not be happy with this approach.
Redundant Array of Independent Disks is a way to preserve the data to the latest point. It is sometimes referred to as Redundant Array of Inexpensive Disks. RAID deals with the configuration of the data storage disks. The storage disks will be in smaller blocks and the data will be written into these smaller disks, controlled by the RAID controller. For e.g. if a storage of 500GB is required, it can be obtained by stripping (combining) 7 units of 72GB disks. The controller will have the responsibility of allocating the data into these 72GB disks. For the end user, in this case an OS, it appears like a single 500GB disk. The advantage is that the writing to the disks will happen in parallel and in this case will achieve 7 times faster write speed than a single 500GB disk.
RAID0 – RAID 0 means stripping to get a bigger disk. There is no backup or crash recovery mechanism present in this type of setup. Many smaller disks will be stripped to make a bigger disk, controlled by a controller. This set up cannot sustain a disk failure.
RAID1 – RAID 1 means mirroring. The disk is mirrored. The redundancy of the data is present but in case of a crash of any of the disk, the data can be recovered from the mirrored disk. With higher redundancy and poor performance, data safety from crash is achieved. Failover is also achieved in this setup.
RAID 3 – RAID 3 is a case where the data is stored in one location and its parity is stored in a different disk. This works with 3 disks where the data will be written to disk1 and disk2 and the odd/even parity will be written to the parity disk. In case the disk1 fails, using the parity information and the data on disk2, the data on disk1 can be recovered. In this setup, the data redundancy is 33%. The issue in such a setup was that the parity disk had a huge load to handle.
RAID5 – Similar to RAID3 but in this case, the parity disk is rotated between the data disks. In RAID3, we allocated the 3rd disk as the parity disk. In this setup, the parity disk is rotated between all the disks. For the first time, the 3rd disk will have the parity information and 1st and 2nd will have the data. For the next data written, the 2nd and 3rd will have the data and the parity will be stored in the 1st disk. This continues. A single disk failure can be sustained with this set up without having 50% redundancy like RAID1 but still having 33% redundancy like RAID3.
RAID6 – RAID6 works on dual parity. In this setup the parity information is stored in two disks and the data is also stored in 2 disks. The parity disks are rotated between the available disks like RAID5. RAID6 set up can sustain 2 disk failures. In case 2 disks fail at the same time, the data in those disks can be recovered using the parity information stored in the other 2 disks.
RAID0+1 – RAID 0+1 is merging RAID 0 and RAID 1 in the same order to get the advantages. Firstly all of the available disks are set up as RAID 0 i.e. all the disks are stripped together to achieve the required space. Another exact configuration is done with another set of disks. These to configurations are then configured as RAID1 i.e. mirrored. In other words, it’s setting up 2 RAID0 set up and then performing RAID1 setup on it i.e. mirroring. This set up can sustain the disk failure of any disks as long as the mirror copy is intact. However there is a 50% redundancy of space.
RAID1+0 – RAID1 + o is merging RAID1 and RAID0. The individual disks available are first mirrored. Then these mirrored disks are then stripped together to achieve the required space. This setup can sustain any disk failure (as long as the mirror doesn’t fail) but has 50% redundancy.
Based on the space redundancy, cost implications can be figured out. Based on the possibility of recovery, the availability can be measured. Similarly performance can be measured based on how many places the data needs to be written. RAID1 is better performing as data is written to a single disk and no mirror copy is written but of course with lesser availability. Similar analysis can be done for other RAID levels too.
When an enterprise class machine is procured from a vendor like HP, IBM or DELL, it doesn’t come with a hard disk to store your data. The hard disk that is shipped with the machine is primarily used for loading the operating system. The capacity of such a hard disk will be generally 72GB, which will be mirrored if procured that way. So where can the users store their data? It can be stored in two types of places, the SAN and the NAS.
Storage Area Network means the storage is a separate entity that is connected to the machine through a separate network. This network will be different from the LAN. The storage area will be connected to the machine using a Fiber channel which gives a considerable speed in transferring the data. SAN uses block storage access which gives better performance. Also the data stored in the SAN area is accessed by disk numbers and it’s the raw data. This type of storage can be used for database storage. The SAN allocated to one machine cannot be accessed by any other machine and is not suitable for sharing data between machines.
Network Attached Storage is where the storage is in a different location and data transfer happen through the LAN. The impact on the LAN will be high when the data is transferred to the NAS. The data placed on the NAS is accessed by filenames and byte offsets. The security and permission on the files are also handled by NAS itself. For this reason, the accessing of he files will be slower than SAN. NAS is ideal for sharing the data between two machines even if the machine is using different operating systems. This type of storage can be used for file share servers, database backups, emails storages etc ….
Basic knowledge about memory settings for java processes and UNIX commands is required. This article knowledge can be used to debug memory issues related to applications deployed in application servers or standalone java processes.
Last week I was looking into a batch application which is designed for an uptime of 24X7X365. The application processes data very efficiently and fast when the application is started. After certain point of time, the application was not processing any data or rather it was becoming progressively slow. To fix the issue, I had to do some amount of research and since I did not find any directly available documentation, I decided to do it myself. Although the experience I put here is for batch application the same can be used for web application and any other type of applications that use JDK6 or above.
This article will explain few tactics that can be used to identify if the application is hanging or not responding due to memory issues or if there are some possible memory leaks. This article assumes that you are running the application in UNIX environment with SUN JVM. The syntax used might be slightly different for windows environment in case you want to tailor it for windows environment.
To give a gist of the application that I used, it processes and compares different versions of XML documents. The application processes the data in batches. During the initial hours of the application, the rate of completion was 12 batches/hour (ignore what a batch size is as this is used only for showing relative figures). After 3 hours, the rate of execution dropped to 3 batches / hour and after 5 hours, the rate dropped to 1 batch / hour. This showed that the application was having some problem, which could be memory leaks, locks, CPU contention, Network issues, and or database issues.
CPU Usage
The CPU usage during the first, third and fifth hour were 99.3%, 75% and 4% respectively. This was hinting that the application was not really processing the data as it progressed. So the next step was to find out what was happening. The possible hints are that the system is doing something else which doesn’t require so much of CPU like GC, IO Wait, Locks etc.
Thread Dump
The thread dump of the process was taken to figure out the state of each thread. The application was using a batch framework designed on multithreading. Hence the thread dump showed details for all of the 20 threads it was using.
The syntax to take the thread dump in UNIX is
kill -3
The output will be redirected to the standard output log configured for your process. Remember its not the log4j logs, it’s the standard output log. Most of the application servers name it (of course you can configure it) as SystemOut.log
The thread dump showed that all the 20 threads were in RUNNABLE state.This showed that the application threads are not in any deadlock situation and neither is it waiting for a monitor entry (like synchronized blocks). This also showed that the threads were not waiting on IO.
Memory Profiling
The next area to investigate was the memory. The process was started again with the following command line parameters to get the GC details printed.
We aimed at GC processes details as it will explain what are the events happening with respect to the memory. The GC log can give details
How much objects are still referenced by the application.
How much objects are removed from the memory.
How many times Full GC happens.
Time taken for the GC process.
There are 2 types of entries you will find in the GC log.
Partial GC: This clears the objects from young generation area by removing it from heap (if the object is no longer referenced by application) or moves the objects to the old generation area. The partial GC is represented as shown below
The above line means that the young generation was having an initial size of 3099243K. After the GC process completed, the young generation size reduced to 15566K. The unwanted objects were either removed or moved to the old generation area. The second section shows that the details about the entire heap (Young and Old Generation area). The size of heap before GC was 4976226K and after the GC the size reduced to 1905642K.Theentire process of GC took 0.0220170 secs.
Full GC: This process performed the full GC as the old generation was reaching its capacity and the tenured objects from new generation area were not able to be moved from the new area to the old area. The Full GC is represented as shown below.
The above line means that the Young generation occupancy changed 8110K to 0K due to the GC process. The old generation size before the GC was 2069790K and after the GC it was 1024980K. The logs also details about the permanent generation area too.
To generalize the above logs, the GC details are printed like this in the gc_log file
:Starting Capacity à Final Capacity
Taking the topic back to our application, after 5 hours, the GC log was showing only Full GC happening every 2 seconds. The reason was that the old generation was not getting cleared which was indicated by the similar starting capacity and final capacity of the old generation area in the GC log.
The above log and inferences suggested that the application has memory leaks. We took different approaches and hit a roadblock in some approaches. The various approaches that were attempted are listed below.
To identify the memory leak issue, we need to figure out how many objects are getting created by the application and how many of them are removed after its use. For e.g.: If a byte stream is opened and not closed after its use, the byte array will continue to exist in the memory causing filling up of the old generation area. Since the byte array is present in the new area for long time, the objects will be moved to the old area. Hence the aim was to identify the objects that are occupying and filling the memory.
gcore
Using gcore, the process dump can be created. From the core dump, jmap process can generate a heap dump file. Using the heap dump file, the jhat process can generate a detailed histogram of objects in the heap. Our application was working on JDK5. gcore is a UNIX BSD utility which will generate the image of the running java process. The syntax to generate the core is
gcore
where pid is the process id of the java process. The file will be created by the name core.. The gcore process will create a file with a size which is equal to the resident memory used by the process. So if your process uses 3GB of resident memory, the core file created will be approximately 3GB and it might take 1-4 hours. While the gcore is running, all memory operation will be suspended on the process by the OS.
The core file generated is passed as parameter to the jmap process which will be used to generate the heap bin file. Since the core was generated for a process run on JDK5, the jmap of JDK5 should be used to generate the heap dump file. The syntax used is
Attaching to core core.5831 from executable /opt/java/bin/java, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.6.0-ea-b52
Dumping heap to heap.bin ...
Heap dump file created
`which java` is used to get the path of the executable of java. The output will be created as heap.bin file. Using the heap.bin file, we can generate the heap histogram and details with the jhat utility introduced in JDK6.
The jhat can understand the heap dump created by the JDK5 and JDK4 processes (theoretically true but it did not work for us). Another point to note in using jhat is that it requires a lot of memory (approx 6-10GB for 2GB Heap file) and hence requires a 64bit JVM.
jhat (JDK 6 & above)
As mentioned before, we tried to generate the core file and generate the heap dump out of the core file. The jhat utility gave various exceptions while loading the heap dump created by the JDK5 process. So we used the JDK6 process to run our application. With JDK6, the approach we took is given below.
We first used jmap to generate the heap dump file. The syntax used is given below
/usr/java/jdk1.6.0/bin/jmap -dump:format=b,file=
After the heap dump file is created, we use the jhat utility to generate the heap description. The syntax used for the jhat is
The jhat utility will extract the data from the heap dump file and load it into the memory. Once the loading is complete, jhat will start a webserver at the port specified in the command shown above. The heap details can be accessed at the web URL
http://:8080/
Heap Histogram
All Classes (excluding platform)
Class Instance Count Total Size
class [B 337060 1428530365
class [C 3708107 302392746
class java.lang.String 3653039 73060780
class [I 52573 51248160
class xh7_6_13.yl 321018 33064854
class [Ljava.util.HashMap$Entry;78852 13199256
class [Ljava.lang.Object; 72781 12525120
class java.util.HashMap$Entry 156231 4374468
The [represents array of objects of type mentioned as the next word.
class [C is char[]
class [B is byte[]
class [Z is boolean[]
class [S is short[]
class [I is int[]
class [J is long[]
class [D is double[]
The details like who are referring to each object are also present inside the heap histogram details. This is found by using the referrer and reference property of each type of object. Using this data, we can identify the objects that are loaded into the memory and the objects that are unintentionally lingering in the memory. Once we identify the object, we can track the code to remove the unwanted references.
jmap
With JDK6 and above, the jmap process can directly print the heap histogram as a text file. This is much easier and can give early indications of memory leak. Since the output is a text file, more details like who loaded, who is referencing it will not be present. For the details that are missed in the jmap histogram output, jhat need to be used.
Memory Profiler
We used a commercially well known memory profiler and it did not serve the purpose.
Though the intention of the document is not to show how the issue was fixed, few reviewers felt that it should be added. From the heap histogram, it was evident that the byte array was consuming almost 1.4GB of the available 2GB space of the Old generation area. The remaining 0.6 GB was occupied by a cache, which was designed to do it that way. The byte array was occupying memory as one of the byte streams was not closed by the application.
The above cases work with SUN JDK. For other JVM’s there are other tools like HEAP Analyzer and MDD4J.
Working as a Technical Architect in the Software Development space. My skill sets include
Java, J2EE, Oracle , DB2, UML, Design Patterns, XML.
I have a passion towards performance engineering and Infrastructure design areas.