We have a SaaS application running with an AngularJS front end and Jasper Reports integrated using the Visualize.js framework. We are seeing an issue where after the Jasper server has been running for a while, the call to get the input controls will stall in the browser. The strange thing is that all the other calls proceeding it (auth, resourcessearch, etc.) return just fine. It seems to be only the inputcontrols that stalls. When this happens, we see no errors in the logs, memory & CPU on the Jasper server are fine, etc. To fix the problem, we are generally forced to bounce the Jasper server.
Has anyone experienced this problem? Any advice?
A little more info:
Jasper Professional version 6.1.1
Seeing the problem in all supported browsers (IE, Firefox, Chrome)
Problem happens both with a single user and with concurrent users
Input controls will sometimes return after 8-10 MINUTES if we wait
long enough (with Apache timeout cranked to 15 minutes)
Related
I'd appreciate help determining why my Word VSTO Add-In is causing 45 second load times.
The Add-In is used by multiple customers, only one of which experience this issue. I can not reproduce the problem on any of my test environments. (all running Windows 10, Office 365)
Findings:
v35 of the Add-In works fine (built back in March).
After the customer installs v55 the problem starts (built in July).
I've incrementally removed all my code, nuget packages, reference (everything) from the Add-In and the problem persists.
I've removed my Add-In and create a new WordAddin1 project. The 45 second problem occurs when this Add-In is installed at the customer.
If I rebuild v35 today and run on the customer machine it works fine.
I have established that the 45 seconds happens BEFORE my Add-In code get's a chance to run.
I have run fuslogvw.exe to determine if any dependencies are causing timeouts (they aren't)
I have run performance monitoring to ensure that CPU, Memory, Disk, Network traffic are at acceptable levels (they are)
I have run Telerik Fiddler to monitor traffic and can see multiple calls (4) to Windows Update that time out (the customer pushes out updates via SCCM and does not get updates from Windows Update)
2 of those Windows Update calls and timeouts happen when I disable my Add-In and Word opens within 5 seconds.
How can I better understand what Word is doing during that 45 seconds? It's a black box that I can't seem to peer into.
Any help greatly appreciated
My problem is the infamous "StatusCodeException: 0" problem happening when using GWT 2.6.1 when accessing page via subdomain https://sub.site.com/.
Now, this happens quite sporadically for one customer using IE11 and I can't reproduce this from several distinct computers using IE11, IE10, IE9 or IE8 (not to talk about Chrome or Firefox).
Accessing exactly the same webapp from https://site.com/ seems to work fine for that customer.
This obviously lead me to conclusion that I'm having problem with Same Origin Policy.
What is strange though is that my webapp is designed in the way that no cross-domain or cross-subdomain requests are made. Same goes for no cross-protocol as well no cross-port requests. In other words, Same Origin Policy is not violated in this situation. As a confirmation of that, I can provide following proof:
While being at customer site I've seen how this is reproduced: customer starts using application and everything works fine - all requests are returning response normally. Then, after several minutes of working, exactly the same requests on the same page (without reloads) starts to fail with StatusCodeException: 0.
Basically, both https://sub.site.com and https://site.com points to the same IP, and there is only one Tomcat webapp serving exactly the same resources both for https://sub.site.com and https://site.com.
Another proof would be the codebase of the single GWT module itself: there I use only one instance of one service called DashboardService:
public class DashboardModule extends EntryPoint implements IDashboardModule {
private final DashboardServiceAsync dashboardService = createDashboardService();
#Override
public void onModuleLoad() {
// loading of module elements
// dashboardService is passed as a parameter so only one instance is used
}
/**
* PLEASE SEE QUESTION #1 BELOW CODE SNIPPET
*/
private static final String DASHBOARD_REQUEST_URL = "request";
private static DashboardServiceAsync createDashboardService() {
final DashboardServiceAsync service = GWT.create(DashboardService.class);
((ServiceDefTarget) service).setServiceEntryPoint(DASHBOARD_REQUEST_URL);
return service;
}
}
=================================== EDIT ====================================
After looking in the console at customer location, the error was always the following:
SCRIPT7002: XmlHttpRequest: network error 0x2ee4, ...
so it seems that this has nothing to do with Same-Origin Policy, because as per this article it is described as ERROR_INTERNET_INTERNAL_ERROR An internal error has occurred.
It's a pity, but I've found only 2 mentions of this error which were not resolved:
Error under IE10 and Error under IE11.
I have an assumption that customer is very probably accessing site through some proxy which slightly changes the requests and IE can't handle them.
Question 1: does anybody knows how can I simulate or reproduce mentioned error locally?
Question 2: does anybody knows how this problem can be gracefully worked around?
Question 3: is it ok to simply retry the request, or this request may have reached the server and modify it, so retrying it may produce duplicate modification?
Will try to setup forwarding proxy to simulate possible customer setup to at least reproduce mentioned error...
I greatly appreciate any help!
Ok, so after bugging with this problem for a workweek I finally managed to solve it.
Actually, I was able to reproduce very similar problem locally when I installed Apache2 server in front of Tomcat and accessed it from another VirtualBox Win7 host with IE11. This gave me sporadic StatusCodeException: 0 with Network error 0x2ef3 though but the behaviour was very similar: GWT-RPC requests started to fail after a minute or so. This was reproducable in IE10 and IE11 but working fine in IE8 and IE9 :) (is IE getting crappier with new versions?)
Locally I was able to fix that problem by simply disabling Keep-alive functionality for IE browsers by adding following lines to /etc/apache2/sites-enabled/default-ssl.conf Apache2 ssl configuration file:
# following line was added
BrowserMatch "Trident" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
This basically tells Apache2 not to use keep-alive, use special SSL handling and generally downgrade to HTTP 1.0 standard whenever user-agent string in request has Trident word (matches IE11 and IE10 and possibly earlier IEs)
This added Connection: close HTTP header to each response and seemed to work fine locally.
On customers site this wasn't still working and produced the same Network error: 0x2ee4.
It may be worth noting that customer was using McAfee Web Gateway as forwarding proxy which stood in the middle of browser <-> server communication.
Long story short, I found out that the problem was in the following: when page loads there are multiple GET requests being sent to server to get the page, resources etc. Then after 10 seconds of using it (my webapp is single-page-application, so user may spend more than 10 minutes on same page) only GWT-RPC requests are being made to the server which are POST requests. And after a minute of using this page (I suspect 1 minute = keep-alive timeout of proxy server) these POST requests start randomly fail with 0x2ee4 network error.
After I implemented GWT-RPC retry functionality, I found out that after 30 seconds of retries simply ALL GWT-RPC requests fail with above error. Refreshing the page was solving this problem again for a minute or so and then same story happened.
So, I figured out that CRAPPY IE11 and IE10 are incorrectly handling combination of SSL, Keep-alive and POST requests. It seems that сrappy IE10 and IE11 simply can't renew keep-alive ssl connection using POST requests and only do this using GET requests.
Please note that Chrome, Firefox and other normal browsers are handling this situation quite well. When inspecting how Firefox behaves in such situation in Firebug: it can be clearly seen that POST request is made, then it is shown as aborted for like 0.5s and then this it is shown as successful (I suspect that Firefox handles this specific situation and makes GET request to server itself to renew SSL keep-alive connection and then retries POST request)
So, to fix this problem in IE I simply implemented functionality which "pings" server with GET request every 5 seconds (be ready to experiment with this time since this is most probably related to customer's proxy keep-alive timeout).
This made it work (please note that above Apache2 configuration hack is not needed in this case)
I really hope that this will help people with similar issue and save their time
Resources used:
IE Network Error 0x2ef3 question 1
IE Network Error 0x2ef3 question 2
IE Network Error 0x2ef3 question 3
Awesome q&a on how to implement transparent GWT-RPC retry functionality
P.S. Will I report this IE10 and IE11 issue to Microsoft? - really I'm not eager spending 30+ minutes of my time reporting issue on commercial crappy IE browser issue after I've already spent more than a week of finding out the problem.
I insist on recommending Chrome or Firefox or other normal browser to customers as viable alternative and I still think that IE11 is not suited for modern websites with AJAX
We have a very strange problem at the moment whereby our Silverlight 4 application will not display the contents of ComboBox on (some) client machines.
We have an observable collection in our view model, with a simple binding expression on the ItemsSource on the ComboBox. In the page's Loaded event, we are calling a domain service to retrieve the items, then in it's Completed event we are storing the returned items into the collection. Nothing fancy.
Firstly, when we deployed the solution in Release mode, the combobox's had no values. I opened fiddler and saw the request and response from the domain service, and it was in fact successfully returning the correct data to the client. However the combobox's had no data in them.
I rebuilt in Debug|Any CPU configuration, hit the same URL and it worked straight away - the combobox's were filled with data. Problem solved? Not quite.
We then gave the URL to someone else to test (on the same network/subnet) and the combobox
s were empty again. It works on 5 machines, and doesn't work on the rest. I checked fiddler, and the response is coming back with all the data - Silverlight just doesn't populate the comboboxes.
We have tried a number of things - IE no addons, chrome incognito's, cross domain and client access policies... nothing seems to make a difference. We've tried running the browsers as administrator, we've even tried on very old machine running IE6, same issue (ie no UAC or anything strange there). No anti-virus installed on any of the machines. At a complete loss. We've tried machines on the company domain, and off the domain with no difference - different operating systems (xp/win7).
Does anyone have any ideas or solutions for me on this problem? Seems like there's something installed on the machine doing it?
Cheers,
Matt
This is probably a timing issue. ComboBoxes wreak all sorts of havoc. Check out Kyle's blog for tips and some tools to make things easier.
http://blogs.msdn.com/b/kylemc/archive/2010/11/02/silverlight-combobox-frequently-asked-questions.aspx
The general problem is that the Silverlight ComboBox was not designed with async data patterns in mind.
We have a ASP.NET C# website (not MVC) that consists of a half dozen Pages. One of them is very large, consisting of several 3rd party controls (from Telerik, FarPointSpread and a few from the Ajax Control Toolkit) and about 15,000 lines of code.
This particular page, which is invoked by way of a response.redirect command from a prior page, has always loaded very slowly. Once we click on the button it takes quite a while (perhaps 10 seconds) for the new page to appear. While this is not especially acceptable what is much worse is that, when the new page actually does load, it takes quite a bit more time (perhaps yet another 10 seconds) for the various elements of the page (drop down lists, buttons, scroll bars and the like) to become available to the user.
Recently we started to use Fiddler to try and get some statistical information to help us improve on this. One of my associates, who has access to one of our Web Servers, has been using fiddler to monitor the performance of this program. His findings are:
• Our compression routines seem to be working. Much of the static information required by the program is coming from cache.
• Some of the images come back with a return code of 401, but these images are eventually made available.
• Fiddler reports an ‘Aggregate Session’ time of approximately 4 seconds.
• It also reports a ‘Sequence (clock)’ time of approximately 16 seconds.
• When we use fiddler to acquire statistics for any of the other programs (which are all much smaller and don’t have the issues this larger program has) we do not see the large difference between the ‘Aggregate Session’ time and the ‘Sequence (clock)’ time
Sequence time being longer than the aggregate session time means that the client is idle for some period of time and not making requests, perhaps due to slow-running JavaScript on the client.
The 401s are from HTTP Authentication requests from the server.
The company has recently implemented software not written by us. The software uses Crystal Reports and whenever somebody draws a particularly large report and close their browser before the report is finished loading, we cannot draw anymore reports. The only way to fix it is to reset iis which is obviously exceptionally bad practice.
Any ideas on how to overcome this?
Thanks
So if one person closes their browser prematurely, the app breaks for everyone? Can two people try loading one of these long-running reports at once? Are there multiple templates, and this only breaks one and leaves the others ok?
It sounds a bit like the app's implementation of Crystal is holding an exclusive lock on the original template, and so when the user quits prematurely the app doesn't release the template for other users to use.
If it's a SQL server it is pulling data from, you could kill the SPID on the SQL server, that may allow the CR process to exit more gracefully; if you're using IIS6, you could configure a worker process to cycle automatically after a fixed number of requests or a time frame. Creating multiple worker processes may help also.
I wonder why it is hanging though, will it succeed if you wait long enough for the prior query and the current one to finish?
Finding a way to speed up the query would be a good idea too; or have large reports run off-hours and delivered to the users.