473,327 Members | 2,065 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,327 software developers and data experts.

Multiple instance of process - memory conflicts

I wonder if anybody could shed some light on a problem I am
encountering.

I have written a program in C that runs on Solaris 2.8. At busy times
of the day there may be multiple instances of it running (5-10), each
process taking approx. 3 seconds to complete.

Each instance of the program basically fetches data from a Oracle
database (using Remedy ARS API routines) and stores it in a user
defined structure that I have defined as a global variable. The
problem I encounter is when multiple instances of the program are
running. Often I find that the data in memory being held in one
process is mixed up with the data in memory of another.

A simplified example could be:

process instance 1 fetches data from record NA1234 and stores record
id in a string variable str1:

process instance 2 fetches data from another record NA9999 and stores
record
id also in a string variable str1:

However when I check the value of var1 in process instance 2, it
sometimes may say NA9999 (which would be correct) but other times it
may say NA1234 (ie. it is sharing the memory space of process 1),
especially when the processes are running in parallel.

Can this phenomena be attributed to global variables - if so changing
to a local instance would relieve this?

Any assistance greatly appreciated.

-- Shuaib
Nov 13 '05 #1
5 4279
sr******@yahoo.com (Shuaib) writes:
I wonder if anybody could shed some light on a problem I am
encountering.

I have written a program in C that runs on Solaris 2.8. At busy times
of the day there may be multiple instances of it running (5-10), each
process taking approx. 3 seconds to complete.

Each instance of the program basically fetches data from a Oracle
database (using Remedy ARS API routines) and stores it in a user
defined structure that I have defined as a global variable. The
problem I encounter is when multiple instances of the program are
running. Often I find that the data in memory being held in one
process is mixed up with the data in memory of another.


Are these processes using shared memory? If not, it's impossible to
get a mixup. If they are using shared memory, you will get that sort
of problems, unless you do something to prevent it.

--
Måns Rullgård
mr*@users.sf.net
Nov 13 '05 #2
In article <12**************************@posting.google.com >, Shuaib wrote:
I wonder if anybody could shed some light on a problem I am
encountering.

I have written a program in C that runs on Solaris 2.8. At busy times
of the day there may be multiple instances of it running (5-10), each
process taking approx. 3 seconds to complete.

Each instance of the program basically fetches data from a Oracle
database (using Remedy ARS API routines) and stores it in a user
defined structure that I have defined as a global variable. The
problem I encounter is when multiple instances of the program are
running. Often I find that the data in memory being held in one
process is mixed up with the data in memory of another.

A simplified example could be:

process instance 1 fetches data from record NA1234 and stores record
id in a string variable str1:

process instance 2 fetches data from another record NA9999 and stores
record
id also in a string variable str1:

This is virtually impossible, I'd say;
* A bug somewhere in your program
* You are using threads rather than processes, and have locking
issues
* you use shared memory, and have locking issues.
* oracle or the api you use somehow screw things up for you,
or you havn't thought things enough through, e.g. something
updates your database while you query it and similar
potentional problesm.
Nov 13 '05 #3
Shuaib wrote:
I wonder if anybody could shed some light on a problem I am
encountering.

I have written a program in C that runs on Solaris 2.8. At busy times
of the day there may be multiple instances of it running (5-10), each
process taking approx. 3 seconds to complete.

Each instance of the program basically fetches data from a Oracle
database (using Remedy ARS API routines) and stores it in a user
defined structure that I have defined as a global variable. The
problem I encounter is when multiple instances of the program are
running. Often I find that the data in memory being held in one
process is mixed up with the data in memory of another.


My guess is you've done something like this:

(1) open Oracle connection in parent process
(2) fork()
(3) do Oracle query in children

That may not be a valid way to use the Oracle db client code.
I would try doing this instead:

(1) fork()
(2) open Oracle connection in child
(3) do Oracle query in child

I'm not an Oracle expert, I am only thinking of what might happen
if two instances of the client code are sharing the same initial
values in their data structures and are sharing the TCP connection.

Hope that helps.

- Logan

Nov 13 '05 #4
Logan Shaw wrote:
Shuaib wrote:
I wonder if anybody could shed some light on a problem I am
encountering.

I have written a program in C that runs on Solaris 2.8. At busy times
of the day there may be multiple instances of it running (5-10), each
process taking approx. 3 seconds to complete.

Each instance of the program basically fetches data from a Oracle
database (using Remedy ARS API routines) and stores it in a user
defined structure that I have defined as a global variable. The
problem I encounter is when multiple instances of the program are
running. Often I find that the data in memory being held in one
process is mixed up with the data in memory of another.

My guess is you've done something like this:

(1) open Oracle connection in parent process
(2) fork()
(3) do Oracle query in children

That may not be a valid way to use the Oracle db client code.
I would try doing this instead:

(1) fork()
(2) open Oracle connection in child
(3) do Oracle query in child

I'm not an Oracle expert, I am only thinking of what might happen
if two instances of the client code are sharing the same initial
values in their data structures and are sharing the TCP connection.


Extremely likely.

I have found (painfully!) that even this leads to trouble:

(1) Connect to Oracle in parent
(2) fork
(3) Do nothing related to Oracle in child
(4) Exit child

or this:

(3) Do nothing related to Oracle in parent
(4) Exit parent

Because the Oracle client runtime registers an atexit, just exiting the
process becomes akin to an Oracle request!

Since there does not seem to be any way to unregister an atexit handler,
the only thing that works is to have *NO* Oracle connection at all while
you fork. (There may be something in the most recent Oracle OCI API to
circumvent that problem, but I haven't found it yet)

Hope that helps.

- Logan

--
Michel Bardiaux
Peaktime Belgium S.A. Bd. du Souverain, 191 B-1160 Bruxelles
Tel : +32 2 790.29.41

Nov 13 '05 #5

"Michel Bardiaux" <mb*******@peaktime.be> wrote in message
news:3F**************@peaktime.be...
I have found (painfully!) that even this leads to trouble:

(1) Connect to Oracle in parent
(2) fork
(3) Do nothing related to Oracle in child
(4) Exit child

or this:

(3) Do nothing related to Oracle in parent
(4) Exit parent

Because the Oracle client runtime registers an atexit, just exiting the
process becomes akin to an Oracle request!


That's why the child should not call 'exit'. This same problem exists
with stdio streams.

DS
Nov 13 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

11
by: Ohaya | last post by:
Hi, I'm trying to understand a situation where ASP seems to be "blocking" of "queuing" requests. This is on a Win2K Advanced Server, with IIS5. I've seen some posts (e.g.,...
11
by: Mike | last post by:
Looking to find any information on how to properly configure multiple instances of DB2. This is on Win2k db2 ver 7.2. I am basically looking for information on how the multiple instance settings...
9
by: Abhishek Srivastava | last post by:
Hello All, In IIS 6.0 We have a concept of worker processes and application pools. As I understand it, we can have multiple worker process per appliction pool. Each worker process is dedicated...
6
by: James Radke | last post by:
Hello, I have a multithreaded windows NT service application (vb.net 2003) that I am working on (my first one), which reads a message queue and creates multiple threads to perform the processing...
22
by: Brett Romero | last post by:
If my UI app uses three DLLs and two of those DLLs reference something named utilities.dll, does the UI app load utilities.dll twice or does the compiler recognize what is going on and load...
10
by: John | last post by:
I currently have a Windows Service that runs Transactions that are very Processor/Memory Intensive. I have a requirement to deploy multiple instances of the Web service on the Same server. Each...
1
by: mikelujan | last post by:
Hi, Our application starts an external application using System.Diagnostics.Process class and the Start() method, as per code snippet below. This application run as a Windows service, and must...
19
by: Zytan | last post by:
I want multiple instances of the same .exe to run and share the same data. I know they all can access the same file at the same time, no problem, but I'd like to have this data in RAM, which they...
1
by: richard.crosh | last post by:
What is the IBM recommendation for the number of DB2-LUW databases per instance on AIX? With Oracle, it is one-to-one. In DB2 multiple databases can co-exist in an instance but is this...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.