Active TopicsActive Topics  Display List of Forum MembersMemberlist  Search The ForumSearch  HelpHelp
  RegisterRegister  LoginLogin
PowerHome General
 PowerHome Messageboard : PowerHome General
Subject Topic: Out of memory error Post ReplyPost New Topic
Author
Message << Prev Topic | Next Topic >>
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: November 22 2012 at 08:34 | IP Logged Quote MrGibbage

I noticed that one of my macros was having a problem today. I did some troubleshooting and found that the following
formula was giving an error

ph_geturl1( "{PHCA_SERVER}?username={PHCA_USER}&password={PHCA_PASS}&" + ph_getvar_s(2,10) + "=" +
ph_htmlescape(if(ph_getvar_s(2,3)="1","Motion Detected: ","Secure: ") + string(now())),1,20)

*ERROR* - 10012 Out Of Memory

I reinitialized and still got the error. I shut down PH and restarted it and the formula started working again.
My questions are:

Is there something inherently less than optimal about the formula I am using, and I should be looking for a more
efficient way of doing it?

Is there a way for me to trap errors such as this and notify me that something is amiss?

I have never gotten that error before, and my PH computer is running fine. No other errors or strangeness to lead me
to believe something was wrong with it. This is a relatively new macro that I am working on, so I can't say that it
has been working great for a long time and this just started happening. On the contrary, this is a new macro and I am
getting this error so I am wondering if I am just doing it wrong.

Skip

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: November 24 2012 at 18:04 | IP Logged Quote MrGibbage

Man, this is really causing me fits. I have now broke up the command into two steps

ph_setvar_s(2,1,"{PHCA_SERVER}?username={PHCA_USER}&password ={PHCA_PASS}&" + ph_getvar_s(2,10) + "=" +
ph_htmlescape(if(ph_getvar_s(2,3 )= "1","VIOLATED",string(today() ) ) ) )

and then
ph_geturl1( ph_getvar_s(2,1), 1, 20)

and I get the Out of Memory error on the ph_geturl1 command. PH runs fine for several hours and then out of the blue, I
start getting this error. So far, the only fix has been to actually restart PH.

Anyone have any suggestions? Is there some low-level debugging/trace I can run? I am thinking about passing the url to
curl.exe, but I would rather not if I could avoid it.

Skip

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
BeachBum
Super User
Super User
Avatar

Joined: April 11 2007
Location: United States
Online Status: Offline
Posts: 1880
Posted: November 24 2012 at 20:04 | IP Logged Quote BeachBum

Just a wild thought but have you tried PHUPG against the DB? Sounds like a Sysbase thing to me.

Edited by BeachBum - November 24 2012 at 20:05


__________________
Pete - X10 Oldie
Back to Top View BeachBum's Profile Search for other posts by BeachBum
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: November 25 2012 at 10:33 | IP Logged Quote MrGibbage

My database was 8MB and then I ran PHUPG which took it down
to 4MB. I'll let it run for a while and see if it keeps on
working. Crossing fingers.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
dhoward
Admin Group
Admin Group
Avatar

Joined: June 29 2001
Location: United States
Online Status: Offline
Posts: 4447
Posted: November 26 2012 at 13:52 | IP Logged Quote dhoward

Skip,

Looking at your formula, Im almost thinking that you're using a ph_geturl1 function within PowerHome to make a call to the internal PowerHome webserver. If so, this is probably not the best idea as it can cause problems with the internal queue's and such. Its hard to tell without know the value of [TEMP10].

If thats not it, then I would ask how much data does the URL actually return. Extremely large amounts of data being returned may cause an OOM error.

Depending upon what you're trying to accomplish, there may be a better way to write this. The URLSCRAPER plugin may be useful or perhaps retrieving data from the database via a SQL statement. I would need to have more details on what this code is trying to do.

Dave.
Back to Top View dhoward's Profile Search for other posts by dhoward Visit dhoward's Homepage
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: November 26 2012 at 14:00 | IP Logged Quote MrGibbage

Thanks, Dave. I ran the PHUPG utility yesterday and so far it is still running. As for your
ideas/questions...

This url is not the internal PH webserver. This is for my android app. The server is a google
app engine on appspot. In this case, no data is returned (just a 200/OK). It doesn't need to
return anything because all I am doing is telling the webserver to send the message to my
phone. In any case, TEMP10 just holds the ELK zone that just changed, such as FRONT_DOOR or
KITCHEN_MOTION.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
dhoward
Admin Group
Admin Group
Avatar

Joined: June 29 2001
Location: United States
Online Status: Offline
Posts: 4447
Posted: November 26 2012 at 14:44 | IP Logged Quote dhoward

Gotcha...that makes sense now (what you're doing with the function). Im not sure why you would ever get an OOM error on that then. Makes no sense. You're just making a call to an external server and passing data on the URL line and retrieving a 200/ok response. Not sure why the database would cause that issue either (8M isnt that big) but if its working now Im not going to complain .

Dave.


Back to Top View dhoward's Profile Search for other posts by dhoward Visit dhoward's Homepage
 
BeachBum
Super User
Super User
Avatar

Joined: April 11 2007
Location: United States
Online Status: Offline
Posts: 1880
Posted: November 26 2012 at 14:56 | IP Logged Quote BeachBum

Dave, the reason I suggested the rebuild of the DB assuming it rebuilds any bad pointers, was I have seen in other DBs where a pointer would get overlaid and them memory gets eaten up. Don't know if that was the culprit or not but just a wild guess. If that was the case then the size would make no matter.

__________________
Pete - X10 Oldie
Back to Top View BeachBum's Profile Search for other posts by BeachBum
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: November 27 2012 at 19:34 | IP Logged Quote MrGibbage

Well, I am sad to say I am getting the errors again. Other macros run fine. But this one, I get the OOM
every time it runs, unless I completely restart PH. Re-init isn't even good enough. I have not modified the
macro to call CURL.exe of using the ph_geturl1 command. Let's see how long it works. Dave, if there is
anything else that you want me to try in the interest of troubleshooting, I'm game.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
BeachBum
Super User
Super User
Avatar

Joined: April 11 2007
Location: United States
Online Status: Offline
Posts: 1880
Posted: November 27 2012 at 21:06 | IP Logged Quote BeachBum

Have you tried analyzing with Process Explorer? It might get you closer as to who is chewing up memory.

__________________
Pete - X10 Oldie
Back to Top View BeachBum's Profile Search for other posts by BeachBum
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: December 04 2012 at 19:31 | IP Logged Quote MrGibbage

I haven't seen any smoking guns in Process Explorer. I have started using curl.exe to send the
command, and it is working fine, but it bugs me that I get a command window that pops for a
second or two while the command runs. Is there any way to make that not happen? I still want the
command to run, but I don't want to see the command window pop up. I hope that makes sense.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: December 04 2012 at 19:51 | IP Logged Quote MrGibbage

Funny. It just happened again (started getting the OOM errors). I looked at
Process explorer a bit more and I did notice one thing. While PH was still in
the error state, it was taking up 77MB memory. But after restarting PH, it is
at only 32MB. I wonder if there is some sort of memory leak???

Anyway, I am still interested to hear if there is a way to keep the command
shell fro opening when running the external commands.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
BeachBum
Super User
Super User
Avatar

Joined: April 11 2007
Location: United States
Online Status: Offline
Posts: 1880
Posted: December 04 2012 at 20:45 | IP Logged Quote BeachBum

Have you tried writing to file when running ph_geturl1( ph_getvar_s(2,1), 1, 20). Maybe at the instance when you get the OOM there might be something. Just thinking out loud...

__________________
Pete - X10 Oldie
Back to Top View BeachBum's Profile Search for other posts by BeachBum
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: December 05 2012 at 04:24 | IP Logged Quote MrGibbage

I actually write the results of that that command to the PH user log each time it
runs. By the way, I clear the event log each night, so I don't think it could be me
filling up the event log. Anyway, when this happens, there is nothing remarkable in
the log. One time it works, then the next time noting. Just the error message. And
from then on, just the error message.

By the way, overnight PowerHome's memory footprint increased to 42MB. Last night
before I went to bed it was at 32MB.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
dhoward
Admin Group
Admin Group
Avatar

Joined: June 29 2001
Location: United States
Online Status: Offline
Posts: 4447
Posted: December 05 2012 at 10:31 | IP Logged Quote dhoward

Skip,

I traced the sourcecode and this error is a result that is returned from the Catalyst HTTP control. This is a third party control that PowerHome licenses to do the URL queries and Im not sure why it would give an out of memory error.

Several things we can try. Since you're using the ph_geturl1 function, the second parameter (the 1 in your example in your first post in this section ...string(now())),1,20). Try changing it to a 0. This will still use a Catalyst control but instead of using the HTTP control it will use a raw socket. You can also use values of 2 and 3. Values 1, 2, and 3 all use the HTTP control. Values 1 and 2 are very similar so I would expect your problem to be solved by changing the 1 to either 0 or 3.

Give it a try and let me know how it goes.

Dave.
Back to Top View dhoward's Profile Search for other posts by dhoward Visit dhoward's Homepage
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: December 05 2012 at 17:25 | IP Logged Quote MrGibbage

If I set the second parameter to 0, I get an different error (right away)
An error occurred while processing the execution queue. Resetting execution queue
and trying again.
*** Error Details ***
Error Number: 39
Object Name: uo_socketblob
Class: uo_socketblob
Routine Name: f_geturl
Line: 51
Text: Error accessing external object property remoteport at line 51 in function
f_geturl of object uo_socketblob.

If I set it to 2, no error. Works fine.
If I set it to 3, no error. Works fine.

Since you suggested either 0 or 3, I will leave it on 3 for a while.

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: December 16 2012 at 14:45 | IP Logged Quote MrGibbage

Just updating here. I am still getting OOM errors, with both 0 or 3 for the last parameter. PH is
currently using 135MB, but it has been running for a full week in this OOM condition (I forgot to
check it for a few days). The memory usage just increases and increases, seemingly with each and
every call to ph_geturl1. After restarting PH, it is using only 35MB.

Running the request through curl works perfectly, except I don't like the popup command box. For
now, it would be helpful to know if there is a way to run an external command like curl, which is
a console program, without having the command window popup. Is there a windows trick, or a
powerhome trick, to make this happen?

__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 
dhoward
Admin Group
Admin Group
Avatar

Joined: June 29 2001
Location: United States
Online Status: Offline
Posts: 4447
Posted: December 16 2012 at 15:16 | IP Logged Quote dhoward

Skip,

If PH is increasing in memory usage (and doesnt drop back down at some point when you minimize it), then you are suffering from the memory leak that the version 6 of the Catalyst controls has (the 3rd party control that PH uses for the ph_geturl functions).

I have verified that version 7 of the controls fixes the leak but we won't have it available until 2.1.5.

I know of no trick that will keep the console window from opening except to perhaps try creating a shortcut to run it minimized and then launching the shortcut. But then you wouldnt have the ability to pass the parameters necessary.

Did the other parameters in any way lengthen the amount of time before a restart was necessary?

Dave.
Back to Top View dhoward's Profile Search for other posts by dhoward Visit dhoward's Homepage
 
MrGibbage
Super User
Super User
Avatar

Joined: October 23 2006
Location: United States
Online Status: Offline
Posts: 513
Posted: December 17 2012 at 09:29 | IP Logged Quote MrGibbage

No, changing the parameters don't seem to affect the amount of time before the error
occurs.

I think I am going to schedule a reboot each night to see if that keeps things moving
smoothly.


__________________
Skip
Back to Top View MrGibbage's Profile Search for other posts by MrGibbage
 

If you wish to post a reply to this topic you must first login
If you are not already registered you must first register

  Post ReplyPost New Topic
Printable version Printable version

Forum Jump
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot delete your posts in this forum
You cannot edit your posts in this forum
You cannot create polls in this forum
You cannot vote in polls in this forum