Rollbase REST API performance

Posted by Jorrit on 16-Nov-2015 15:46

Hi,

Where working with rollbase 4.0.2.

We have 2 environments:

First:

production 2 servers:

1 webserver win 2012 (Virtual)

1 DB server win 2012 solid.

test server

1 vm 2012 with db and webserver.

we experience performance differences on the test and production sever when using the REST API with the same call.

On the production server the call have the response time of 16085 ms

On the test Server the same call have the response time of 3190 ms.

could you give me some advice?

thanks in advance.

Jorrit

All Replies

Posted by Ankit Goel on 17-Nov-2015 00:38

Hi Jorrit,

Performance depreciation is expected since db and webserver in your production setup are on different machines (compared to test setup where both db and webserver are on same machine). But in your case the depreciation seems a little too high.

Please share more details about your setup:

* What is the difference between your test and production setup in terms of machine capacity - RAM/compute power etc

* What is the difference between your test and production setup in terms of load? How many concurrent REST API calls are being made in production setup?

Thanks,

Ankit

Posted by Harrie Kuijper on 17-Nov-2015 01:04

Hi Jorrit,

It looks like we have had a similar problem. That was with Rollbase 3.1. Our problem concentrated on the login method of the REST api.. It took +/- 12 seconds (12000ms) to login. All methods executed after login were performing well.

Now, if I substract the time of your "bad" server from the time of your "good" server, the result is also +/- 12 seconds. At my side the problem was gone after we moved to a new server. The problem itself is never fixed.

Progress Support did already research to the problem I had, so maybe it's a good idea to log a case. (for Progress Support members: my case number was 00316849)

Regards,

Harrie

Posted by ajsharma on 17-Nov-2015 01:48

Hi Jorrit,

Please let us know following information if you still facing the problem:

1. Which APIs you facing problem,

2. What the DB Size & Number of records you fetching.

3. Number of fields in the objects.

We will try to find the root cause by replicating the same.

Regards

Ajay

Posted by Jorrit on 17-Nov-2015 02:04

Hi Ankit,

Where in testing mode with both production and test server so there are no other REST calls at the moment.

The production setup is:

DB Server

Windows 2012 with 2 Intel Xeon CPU E5-2670 v3 and Installed memory 32 GB

Webserver

Windows 2012 with 2 AMD Opteron Processor 6174 and Installed memory 16 GB

The test setup is:

DB and webserver

Windows 2012 with 2 Intel Xeon CPU E5-2670 v3 and Installed memory 16 GB

What i also see on the production server when user logs in for the first time it takes about 10 seconds.

after that when the user logs off and login again it is fast.

what i see on the production server when using REST API Login, every call gives back the same sessionId. On the test server every call gives a new sessionId.

Thanks in advance,

Jorrit

Posted by Jorrit on 17-Nov-2015 02:11

Hi Ajay,

This is the call.

/rest/api/getPage?output=json

&sessionId=123456

&viewId=93652

&startRow=0

&rowsPerPage=10

&composite=1

&objNames=tyrequality,tyreperformance,tyreproperty

&fieldList=id,tyretypen_number,name,tyretypem_xmlbacshorttype,R_tyretype_tyrebrand,R_tyretype_seasonappliance,tyretypem_pictureurl,tyretypem_explanation,tyretotransporttypem_labelcode,tyretotransporttypem_tyrecategory,tyrequalitym_description,tyreperformancem_description,tyrepropertym_longdescription,tyrepropertym_countrycode,K_tyretotransporttypem_labelcode,K_tyretotransporttypem_tyrecategory

Records fetching with call above: 388

Records in DB: 177.373

DB folder size in WRK: 300 MB

Thanks in advance,

Jorrit

Posted by Ankit Goel on 17-Nov-2015 02:19

Hi Jorrit,

Regarding:

>>>>>>>>>>>>>>>>>>>>>>

What i also see on the production server when user logs in for the first time it takes about 10 seconds. After that when the user logs off and login again it is fast.

<<<<<<<<<<<<<<<<<<<<<<

First login is expected to take a little extra time. This is because first login involves loading customer in memory. Once loaded the customer is cached in memory and hence subsequent logins work much faster.

Thanks,

Ankit

Posted by Jorrit on 17-Nov-2015 02:25

Hi Harrie,

The first login with the rest method Login takes about 12 seconds. after that we do a call like getPage its slow.

when we do the same call again it extremely fast.

if i change the call for example  rowsPerPage from 10 to 11 its slow again.

I think its something about cashing.

Regards Jorrit

Posted by Ankit Goel on 17-Nov-2015 02:42

Hi Jorrit,

The problem maybe related to network latency between the webserver machine and db. Please check this.

Thanks,

Ankit

Posted by Jorrit on 17-Nov-2015 10:18

Hi Ankit,

I tested the network latency by pinging the network while request the REST API and see no delay.

The strange thing i noticed is that when i call the login method on the production the sessionId stays the same. when i do the same on the test server the sessionId changes everytime i run the login method.

see image attached for the ping reply.

thanks in advance.

Jorrit

Posted by Jorrit on 17-Nov-2015 15:26

Hi

Maybe someone can help me

this is some localhost_acces_log logfile on the prod webserver.

127.0.0.1 - - [17/Nov/2015:22:03:08 +0100] "GET /prod1/api/getPage?output=json&sessionId=........&viewId=93652&startRow=0&rowsPerPage=11&composite=1&objNames=tyrequality,tyreperformance,tyreproperty&fieldList=id,tyretypen_number,name,tyretypem_xmlbacshorttype,R_tyretype_tyrebrand,R_tyretype_seasonappliance,tyretypem_pictureurl,tyretypem_explanation,tyretotransporttypem_labelcode,tyretotransporttypem_tyrecategory,tyrequalitym_description,tyreperformancem_description,tyrepropertym_longdescription,tyrepropertym_countrycode,K_tyretotransporttypem_labelcode,K_tyretotransporttypem_tyrecategory&t=327***********83119329330734472331734573096309432963191325441193337321234533299323444783412317832184410435243564296429142594356441042994250427543584293== HTTP/1.1" 200 15788 8528

(external IP) - - [17/Nov/2015:22:03:08 +0100] "GET /rest/api/getPage?output=json&sessionId=.........&viewId=93652&startRow=0&rowsPerPage=11&composite=1&objNames=tyrequality,tyreperformance,tyreproperty&fieldList=id,tyretypen_number,name,tyretypem_xmlbacshorttype,R_tyretype_tyrebrand,R_tyretype_seasonappliance,tyretypem_pictureurl,tyretypem_explanation,tyretotransporttypem_labelcode,tyretotransporttypem_tyrecategory,tyrequalitym_description,tyreperformancem_description,tyrepropertym_longdescription,tyrepropertym_countrycode,K_tyretotransporttypem_labelcode,K_tyretotransporttypem_tyrecategory HTTP/1.0" 200 15788 8543

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /master/servlet/Component HTTP/1.1" 200 284 15

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 281 0

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /rest/servlet/Component HTTP/1.1" 200 193 16

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /router/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /webapi/servlet/Component HTTP/1.1" 200 197 31

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /search/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /storage/servlet/Component HTTP/1.1" 200 235 0

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "POST /workflow/servlet/Component HTTP/1.1" 200 201 16

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "GET /router/login/login.jsp HTTP/1.1" 302 - 0

127.0.0.1 - - [17/Nov/2015:22:05:07 +0100] "GET /router/login/loginPrivate.jsp? HTTP/1.1" 200 5828 15

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 94

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /search/servlet/Component HTTP/1.1" 200 16 16

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /master/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /master/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 94

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /search/servlet/Component HTTP/1.1" 200 18 0

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /router/servlet/Component HTTP/1.1" 200 15 0

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:06:07 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:09:07 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 94

127.0.0.1 - - [17/Nov/2015:22:09:07 +0100] "POST /search/servlet/Component HTTP/1.1" 200 16 16

127.0.0.1 - - [17/Nov/2015:22:09:07 +0100] "POST /master/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:09:07 +0100] "POST /master/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:09:08 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 94

127.0.0.1 - - [17/Nov/2015:22:09:08 +0100] "POST /search/servlet/Component HTTP/1.1" 200 18 15

127.0.0.1 - - [17/Nov/2015:22:09:08 +0100] "POST /router/servlet/Component HTTP/1.1" 200 15 0

127.0.0.1 - - [17/Nov/2015:22:09:08 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:09:08 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /master/servlet/Component HTTP/1.1" 200 284 15

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 281 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /rest/servlet/Component HTTP/1.1" 200 193 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /router/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /webapi/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /search/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /storage/servlet/Component HTTP/1.1" 200 235 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "POST /workflow/servlet/Component HTTP/1.1" 200 201 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "GET /router/login/login.jsp HTTP/1.1" 302 - 0

127.0.0.1 - - [17/Nov/2015:22:10:09 +0100] "GET /router/login/loginPrivate.jsp? HTTP/1.1" 200 5828 0

127.0.0.1 - - [17/Nov/2015:22:10:10 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 17 0

127.0.0.1 - - [17/Nov/2015:22:10:10 +0100] "POST /storage/servlet/Log HTTP/1.1" 200 - 15

127.0.0.1 - - [17/Nov/2015:22:10:10 +0100] "POST /storage/servlet/Log HTTP/1.1" 200 - 0

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 93

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /search/servlet/Component HTTP/1.1" 200 16 16

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /master/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /master/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 94

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /search/servlet/Component HTTP/1.1" 200 18 0

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /router/servlet/Component HTTP/1.1" 200 15 0

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:12:08 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:15:08 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 94

127.0.0.1 - - [17/Nov/2015:22:15:08 +0100] "POST /search/servlet/Component HTTP/1.1" 200 16 15

127.0.0.1 - - [17/Nov/2015:22:15:08 +0100] "POST /master/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:15:08 +0100] "POST /master/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:15:09 +0100] "POST /storage/servlet/Storage HTTP/1.1" 200 9 109

127.0.0.1 - - [17/Nov/2015:22:15:09 +0100] "POST /search/servlet/Component HTTP/1.1" 200 18 0

127.0.0.1 - - [17/Nov/2015:22:15:09 +0100] "POST /router/servlet/Component HTTP/1.1" 200 15 0

127.0.0.1 - - [17/Nov/2015:22:15:09 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 11 0

127.0.0.1 - - [17/Nov/2015:22:15:09 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 23 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /master/servlet/Component HTTP/1.1" 200 284 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /prod1/servlet/Component HTTP/1.1" 200 281 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /rest/servlet/Component HTTP/1.1" 200 193 16

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /router/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /webapi/servlet/Component HTTP/1.1" 200 197 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /search/servlet/Component HTTP/1.1" 200 197 15

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /storage/servlet/Component HTTP/1.1" 200 235 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "POST /workflow/servlet/Component HTTP/1.1" 200 201 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "GET /router/login/login.jsp HTTP/1.1" 302 - 0

127.0.0.1 - - [17/Nov/2015:22:15:10 +0100] "GET /router/login/loginPrivate.jsp? HTTP/1.1" 200 5828 0

Posted by Ankit Goel on 18-Nov-2015 02:53

Hi Jorrit,

Just to double check - did you test network latency by pinging db machine from inside the web server machine?

Please log a support case with Progress.

Thanks,

Ankit

Posted by Jorrit on 18-Nov-2015 03:19

Hi Ankit,

Yes i did the test on the webserver to the DB server.

I wil log the supportcall.

Thanks for your help.

Regards Jorrit.

This thread is closed