True.  The inefficient queries yesterday were returning 50,000 rows on what 
should have been simple queries, now they are not.

On Jul 15, 2011, at 4:57 PM, Pascal Robert wrote:

> 
> Le 2011-07-15 à 16:52, Andrew Kinnie a écrit :
> 
>> Greetings,
>> 
>> I have 2 issues, the first of which I had before WOWODC, and the second 
>> burst into the open yesterday.
>> 
>> I have an app, an ERRest app, acting as a push notification server, although 
>> thus far now push notifications have gone out to the public, it works for 
>> testing.  The app is connected to by nearly 50,000 iOS devices which have 
>> our iOS app installed.  The iOS app connects to Apple to get a token, then 
>> calls home (my server) and tries to register itself with my server so that 
>> when we do send out notifications, we know which device tokens want which 
>> types of notifications.  The iOS apps on individual iOS devices connect when 
>> running, and send information to my server about the device, the id of the 
>> device, other data including the token and whether they want the 4 
>> notification types to be on or off.  All this works.  (there are 
>> approximately 50,000 registered application_device rows currently, though 
>> we've not sent any publicly visible notifications).  When the app runs, the 
>> devices also try and get the last notification of any type that the device 
>> has been set to ask for, and display that in a drop down (data pulled from 
>> my server)
>> 
>> The server uses ERRest to receive this information and to create a device 
>> (actually an "ApplicationDevice" object) based on passed in json, checks the 
>> database (MySQL) to see if there is an existing row in my application_device 
>> entity/table for the app, and the device id (udid) and if so, updates it 
>> with the newly created device's data before discarding the new device and 
>> saving the changes in the fetched one.  Otherwise, it saves the newly 
>> created device.
>> 
>> However,
>> 
>> 1. Occasionally, two devices try to be created at the same time with the 
>> same primary key (which is provided by the EO_PK_Table in the MySQL 
>> database).  The second device fails with an exception.  I gather this is 
>> because two separate devices are connecting to the server at approximately 
>> the same time, both asking the EO_PK_Table for the next primary key for the 
>> entity, then do some things, then try and save.  First one succeeds, and the 
>> second fails because an object with the PK already exists.  I was under the 
>> impression that EOF should handle this, but it doesn't seem to.
>> 
>> 2. We tried to send out some test notifications yesterday, which exposed 
>> some inefficiencies in my model, which seem to have been resolved, but there 
>> are still significant issues.  Apache and MySQL are fine, neither is 
>> pressed, but the CPU approaches 100% usage in spikes on the server (a CentOS 
>> VM with 16 GB RAM running Java 1.6 64 bit).  Nothing else is running on it.  
>> The individual queries in the registration process do not return more than 5 
>> rows, though there are 18 separate SQL calls caused by the registration 
>> method, all but one returns 1 row, and the other returns 5.  In any event, 
>> MySQL has no slow queries.
>> 
>> So it's the WO Java processes that seem to be taking up 100% of the CPU.  
>> Constantly getting worker-thread broken pipe errors when it is pressed like 
>> that.
> 
> For the record, yesterday we weren't even able to use jstack to see what was 
> going on. But we did see working threads going up to 128. No stuck queries in 
> MySQL.
> 
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to