Hey all,
Once again, aimed at bringing influence to bear on my resume only, he it comes a sample of the type of vocabulary I used to deal with working as a Translator / Interpreter for the Microsoft Brazilian technical support.
=======================================================
Sir Tanoz, how are you doing?
I’ve come herein with the translation you have requested me to do, so as to facilitate the preparation of your action plan.
Well, the basis of the problem lies in the fact that, for an unknown reason, there are some data (objects) which are not removed automatically from the memory when they are expected for so. In order to solve the problem at the moment it arises (not permanently though), the customer removes those data manually by pressing in the screen output below. The problem of doing that manually is that the application he uses in his company (a Computer Telephone Integration Windows Service) has to stop and therefore stopping the company’s production as well, what is undesirable. So, as expected by the customer from the application, the task has to be accomplished automatically, so preventing the company from being stopped for a while all the time the issue comes up.
(Unfortunately, I could not make it more visible than this)
When the process takes place automatically, there is no need to hit to go from the Object Creation to the Object Destruction, they happen one after the other without any person’s intervention.
I shall follow up the description with the answers of your two questions:
1) How is the customer removing the data from the memory?
a. As stated previously, he does that manually by hitting on the screen above. In addition to that, he has to alter (an adaptation) the code of his application to the following characteristics: it is normally used more than one application domain for the system to fulfill its duties. However, the customer has been rewriting the code so as to use only one application domain, having all the objects directed to this single one. By doing so, the system acts as expected not staying with allocated memory for objects anymore, but that does not meet the customer’s needs, since he needs to use more than one application domains.
b. Forcefully, there is another way for doing that, a severe attitude towards the system, which will be fully explained below.
2) How is he passing the object?
a. From an application domain, an MBR object is passed ahead as a parameter of a method under a proxy to another application domain. Further information about the proxy: it’s a transparent proxy generated automatically by the infrastructure of the .NET Remoting.
i. Are the application domains created in the same application space? Yes, they are.
ii. Is there any reference which is maintained in the new application domain when is comes from the old application domain (when transferring objects from the first to the second application domain)? No, there isn’t any reference maintained.
Reading through the Microsoft news, the customer has found some information that might be related to the issue and of utter importance for your analysis. You can have access to it at:
news.microsoft.com
microsoft.public.dotnet.framework.clr (this is the group discussion to head for)
description found: object not collected by GC (garbage collection)
The customer does believe that the issue is connected with the CLR (a runtime issue) and he emphasizes that this problem in unconnected with ASP, since it relates to Windows Service, only. Moreover, this Windows Service loads dynamically some assemblies in different application domains. As it is used an intermediate layer, client applications produced by .NET. have the connection between the Windows Service themselves established by the .NET Remoting.
Now I’ll provide you the ins and outs of the system, how it works since the beginning, until the unexpected behavior faced by the customer:
There are five created projects: four class libraries and one console application. Regarding the Object Request, when this type of object is created, a message informs “object created”, and when this sort of object is destroyed, there is another message that informs “object destroyed”. This is the normal procedure. The class library “linkerapp” is responsible for the creation of one application domain and loads the assemblies into it. When the console application is executed, the activation of the class library “linkerapp” occurs, followed by the class library “generator” and ultimately by the class library “processor”. When the later is activated, Object Requests are created and then transferred to the class library “processor”. The occurrence of this process is enough for having the memory allocated for objects which remain locked in the memory. To expand on the description, the use of the GB (Garbage Collection) does not remove the objects from the memory. Having said that, the only way the customer finds to remove the data from the memory forcefully is unloading manually the application domain which has generated the objects at issue. By doing so, the memory ends up released from the data. Nevertheless, as this procedure is taken in a pinch, it triggers the undesirable stoppage of the application. To reproduce the problem, it’s enough to run the hostapp so that you can face what the customer does.
3) How does the customer know that the data is stuck in the memory?
a. The very straightforward way to notice that is because the customer is normally informed that the objects are generated and destroyed. Since he hasn’t been notified of any object destruction, he infers that there’s been nothing being destroyed over some time.
b. The customer has also installed a tool named “aqtime” produced by the company “automatedga” which informs the names of two objects at issue. They are: stackbuildersink and serveridentity. The customer does believe that these two objects trigger the current issue. Additionally, the tool also reveals that the Object Requests at issue are made reference by two other objects that belong to the infrastructure of the .NET Remoting.
By changing the code appropriately, the customer begins to use the application domain default, which uses one single application domain rather than two as the customer needs.
To sum up, data stuck in the memory has to be removed automatically (generated and destroyed like this) instead of manually as the customer has been doing, so as to avoid the company to be waiting on the customer’s intervention.
If you have further question, let me know, I’ll answer them according to my possibilities.
Concerning the working sample you told me, I unfortunately do not have any files. Everything I got from the customer was also forwarded to you.
The customer can be reached tomorrow from 9:30am to 6:00pm (Brazil time | GMT – 3). He’ll be waiting for your callback as agreed between us.
I hope this description is precisely what you need to follow up and set your action plan. May you have a good labor time. Take care!
MarcoS, Brazilian Technical Router – Customer Service Enterprise
No comments:
Post a Comment