You are on page 1of 34

Accelerate Your JBoss

Andrig T Miller
Global Platform Director, Red Hat, Inc.
June, 2010
Agenda
!at "e "ill co#er...

$nter%ri&e A%%lication Platform tuning.

J'M Tuning.

Hig!(le#el databa&e tuning.

Performance tuning a& a%%lied to an $J) * a%%lication.


EAP Tuning
+et,& loo- at t!e follo"ing area&...

.onnection %ooling.

T!read %ool&.

/b0ect1com%onent %ool&.

+ogging.

.ac!ing.
Connection Pooling
Databa&e connection& are e2%en&i#e to &etu% and tear
do"n...

I !a#e &een a%%lication& t!at created ne" connection& "it!


e#er3 4uer3 or tran&action, and t!en clo&ed t!at connection.

T!i& add& a great deal of o#er!ead, and t!rottle& t!e a%%lication.

Rel3 on t!e data &ource definition& 3ou can &etu% in t!e de%lo3
director3 of t!e $AP, and utili5e t!e connection %ool &etting&.

6ou &!ould monitor 3our connection u&age to determine


%ro%er &i5ing.

A &mall %ool "ill t!rottle t!e a%%lication a& t!e re4ue&t "ill 4ueue for
a default of *0,000 milli&econd& 7*0 &econd&8 before gi#ing u%.

6ou can monitor t!e connection %ool utili5ation from t!e


admin con&ole a& "ell a& "it! databa&e &%ecific tool&.
Screenshot of Administration Console
Example Datasource Definition
<datasources>
<local-tx-datasource>
<jndi-name>MySQLDS</jndi-name>
<connection-url>jdbc:mysql://[host:!!"#/[database</connection-url>
<dri$er-class>com%mysql%jdbc%Dri$er</dri$er-class>
<user-name>someuser</user-name>
<&ass'ord>some&ass'ord</&ass'ord>
<exce&tion-sorter-class-
name>or(%jboss%resource%ada&ter%jdbc%$endor%MySQL)xce&tionSorter</exce&tio
n>
<min-pool-size>75</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
<transaction-isolation>TRANSACT!N"R#A$"C!%%TT#$</transaction-
isolation>
<prepare&-statement-cac'e-size>100</prepare&-statement-cac'e-size>
<s'are&-prepare&-statements>true</s'are&-prepare&-statements>
</local-tx-datasource>
</datasources>
Thread Pooling
T!read %ool& need to be &i5ed a%%ro%riatel3 for t!e
"or-load...

T!e &3&tem t!read %ool defined in 0bo&&(&er#ice.2ml in t!e conf director3


i& for J9DI naming.

T!i& rarel3 need& to be u%dated from t!e default.

T!e !tt%d t!read %ool in J)o&& eb i& defined in &er#er.2ml file under
:&er#er;1de%lo310bo&&("eb(&ar.

<&ed "!en ma-ing HTTP re4ue&t& directl3 to $AP.

T!e AJP t!read %ool i& al&o defined in t!e &ame file, 0u&t in it& connector
&ection.

<&ed "!en ma-ing HTTP re4ue&t& t!roug! mod=0-.

A "ord about t!e ne" load balancer, mod=clu&ter. !en u&ing


mod=clu&ter, 3ou &etu% a li&tener in J)o&& eb, but it u&e& t!e AJP
and1or HTTPD connector, and corre&%onding t!read %ool.
Thread Pooling (Continued)
T!read %ool& need to be &i5ed a%%ro%riatel3 for t!e
"or-load...

T!e J.A t!read %ool i& u&ed in con0unction "it! JM>.

T!i& can be configured in :&er#er;1de%lo310ca(0bo&&(bean&.2ml, and


i& called or-Manager t!read %ool.

T!ere i& al&o a T.P t!read %ool for remote me&&aging client&.

?or t!o&e remote client&, 3ou &et a client t!read %ool t!at %ool& t!e T.P
&oc-et& #ia &er#er;de%lo31me&&aging1remoting(bi&oc-et(&er#ice.2ml.

?or in J'M client&, all t!e %roce&&ing "ill occur on t!e J.A t!read %ool
7or-Manager8.

/ne note !ere, i& t!at if 3ou !a#e a me&&age dri#en bean, t!at in#o-e& ot!er
bean&, &uc! a& &tatele&& &e&&ion bean&, t!o&e bean& "ill al&o run on t!e J.A
t!read %ool.
Thread Pooling (Continued)
T!read %ool& need to be &i5ed a%%ro%riatel3 for t!e
"or-load...

?or $J) * remote client& t!ere i& a t!read %ool defined in


:&er#er;1e0b*.de%lo3er1M$TA(I9?10bo&&(&er#ice.2ml.

If 3our client& are in t!e &ame J'M t!e3 "ill run on "!ate#er
t!read %ool t!e3 are alread3 on.

?or e2am%le, a "eb re4ue&t come& t!roug! t!e AJP connector,


"!en it call& an $J) * bean, it "ill continue e2ecuting on t!e AJP
connector t!read %ool.

6ou can monitor t!read %ool u&age for t!e J)o&& eb


connector& 7!tt%d and a0%8 t!roug! t!e ne" admini&tration
con&ole.

T!e ot!er t!read %ool& can be monitored t!roug! t!e JM@


con&ole.
Screenshot of Administration Console
When calls are in JVM
they execute on the callers
thread pool.
AJP
Thread Pool
HTTP
Thread Pool
EJB 3 client
Remotin
EJB 3 Thread Pool
JM! "lient
Remotin
JM! Thread Pool
#ata$ase "onnection
Pool
Thread Pool elationships
Example of Thread Pools
*++, +hread ,ool
<-onnector &ort./0"0"/ address./12jboss%bind%address3/
maxT'rea&s()*50) max*tt&*eaderSi4e./0567/
em&tySession,ath./true/ &rotocol./*++,/5%5/
enableLoo8u&s./9alse/ redirect,ort./0::!/ acce&t-ount./5""/
connection+imeout./7""""/ disable;&load+imeout./true/ />
<=, +hread ,ool
<>-- De9ine an <=, 5%! -onnector on &ort 0""6 -->
<-onnector &ort./0""6/ address./12jboss%bind%address3/ &rotocol./<=,/5%!/
em&tySession,ath./true/ enableLoo8u&s./9alse/ redirect,ort./0::!/ maxT'rea&s()*00) />
=-< +hread ,ool
<>-- +*?)<D ,@@L -->
<bean name./Aor8Mana(er+hread,ool/ class./or(%jboss%util%thread&ool%Basic+hread,ool/>
<>-- )x&ose $ia =MC -->
<annotation>Dor(%jboss%ao&%microcontainer%as&ects%jmx%=MCEname./jboss%jca:ser$ice.Aor8Mana(er+hread,ool/F
ex&osedGnter9ace.or(%jboss%util%thread&ool%Basic+hread,oolMBean%classH</annotation>
<>-- +he name that a&&ears in thread names -->
<&ro&erty name./name/>Aor8Mana(er</&ro&erty>
<+-- T'e maximum amount of ,or- in t'e .ueue -->
<propert/ name()maximum0ueueSize)>10*1</propert/>
<+-- T'e maximum num2er of acti3e t'rea&s -->
<propert/ name()maximum4oolSize)>100</propert/>
<>-- *o' lon( to 8ee& threads ali$e a9ter their last 'or8 Ede9ault one minuteH -->
<&ro&erty name./8ee&<li$e+ime/>#""""</&ro&erty>
</bean>
!"#ect$Component Pools
T!ere are a #ariet3 of ot!er %ool& t!at need to be &i5ed...

?or $J) *, t!ere are %ool& defined in t!e e0b*(interce%tor&(


ao%.2ml. 6ou fine t!i& file in :&er#er;1de%lo3.

T!ere are t"o t3%e& of %ool& for $J) *, one i& called t!e
T!read+ocalPool, and t!e ot!er i& called t!e >trictMa2Pool.

T!e default& are for >tatele&& and >tateful >e&&ion )ean& to u&e t!e
T!read+ocalPool.

T!e T!read+ocalPool i& bac-ed b3 an InfinitePool, "!ic! !a& no


ma2imum &i5e.

T!i& !a& t!e di&tinct ad#antage of not needing to be tuned.

T!e default& for Me&&age Dri#en )ean& i& t!e >trictMa2Pool.

T!i& %ool actuall3 obe3& a ma2imum, "ill 4ueue u% re4ue&t& "!en t!at
ma2imum !a& been reac!ed, and "ill time out an3t!ing in t!e 4ueue if t!ere
i& not an a#ailable reference from t!e %ool.

T!e&e %ool& can be monitored t!roug! t!e JM@ con&ole.


%ogging

T!e default configuration i& a%%ro%riate for de#elo%ment,


but not for a %roduction en#ironment...

In t!e default configuration, con&ole logging i& enabled.

T!i& i& great for de#elo%ment, e&%eciall3 "it!in t!e ID$, a& 3ou get
all t!e log me&&age& to &!o" in t!e ID$ con&ole #ie".

In a %roduction en#ironment, con&ole logging i& #er3


e2%en&i#e.

Turn off con&ole logging in %roduction.

In t!e $AP, t!ere i& a ne" configuration, called %roduction, and t!e
con&ole logging i& alread3 turned off in t!at configuration.

Turn do"n t!e #erbo&it3 le#el of logging if it& not nece&&ar3.

T!e le&& 3ou log, t!e le&& I1/ "ill be generated, and t!e better t!e
o#erall t!roug!%ut "ill be.
%ogging (Continued)

<&e a&3nc!ronou& logging.

In m3 e2%erience, "it! !ig! t!roug!%ut a%%lication& t!at


generate lot& of log data, t!i& can ma-e a real difference.

T!e log& location can al&o !a#e an im%act, "!et!er 3ou


u&e a&3nc!ronou& logging or not.

6ou can &%ecif3 a %ro%ert3 called 0bo&&.&er#er.log.dir


at t!e Ja#a command line to c!ange t!e location.

ra% debug log &tatement& "it! Ai9Edebu()nabledEHHB.

6our a%%lication "ill create all t!e &tring ob0ect& for eac! of t!e log
&tatement& and +ogC0 create& t!e +ogging$#ent ob0ect for eac! log
&tatement, regardle&& of t!e log le#el t!at i& &et.

I !a#e &een t!i& lead to t!ou&and& of tem%orar3 >tring and


+ogging$#ent ob0ect&, cau&ing garbage collection i&&ue&.
Caching

J)o&& .ac!e i& an integral %art of t!e $AP.

I !a#e %er&onall3 &een it u&ed to cac!e %roduct catalog &earc! re&ult&, "it!
dramatic %erformance im%ro#ement&.

<&eful "!ere re&ult& don,t c!ange muc!, but are e2%en&i#e to generate.

)3 far, one of t!e ea&ie&t %otential %erformance en!ancement& 3ou can ma-e i&
cac!ing of $J) * entitie&.

6ou define cac!e %ro#ider in %er&i&tence.2ml t!at 3ou de%lo3 "it! 3our $J) * a%%lication, and 3ou
u&e t!e D.ac!e annotation on t!e bean& 3ou "ant cac!ed. /n t!e D.ac!ed annotation, 3ou
&%ecif3 t!e u&age being one of t!e follo"ingE

.ac!e.onncurrenc3>trateg3.R$AD=/9+6, R$AD=RIT$, 9/9>TRI.T=R$AD=RIT$, or


TRA9>A.TI/9A+.

6ou define t!e cac!e &i5e and e#iction %olic3 in :&er#er;1de%lo31clu&ter10bo&&(cac!e(manager.&ar1M$TA(I9?10bo&&(


cac!e(manager(0bo&&(bean&.2ml.

&A'(')E be careful "it! cac!e &i5e and e#iction %olic3, 3ou onl3 !a#e &o
muc! !ea% &%ace.

&A'(')E cac!ing i& not a &il#er bullet, and can &ometime& reduce t!roug!%ut.
Example persistence*xml
<&ersistence xmlns./htt&://ja$a%sun%com/xml/ns/&ersistence/
xmlns:xsi./htt&://'''%'!%or(/7""5/CMLSchema-instance/
xsi:schemaLocation./htt&://ja$a%sun%com/xml/ns/&ersistence
htt&://ja$a%sun%com/xml/ns/&ersistence/&ersistenceI5I"%xsd/
$ersion./5%"/>
<&ersistence-unit name./ser$ices/ transaction-ty&e./=+</>
<&ro$ider>or(%hibernate%ejb%*ibernate,ersistence</&ro$ider>
<jta-data-source>ja$a:/MySQLDS</jta-data-source>
<&ro&erties>
%%%
<propert/ name()'i2ernate5cac'e5re6ion5factor/"class)
3alue()or65'i2ernate5cac'e572c*58n&i%ultiplexe&89ossCac'eRe6ion:actor/)/>
<propert/ name(;'i2ernate5cac'e5re6ion572c*5cac'efactor/)
3alue()7a3a<Cac'e%ana6er)/>
<propert/ name()'i2ernate5cac'e5use"secon&"le3el"cac'e)
<propert/ name()'i2ernate5cac'e5re6ion572c*5cf65entit/) 3alue()m3cc-entit/)/>
<propert/ name()'i2ernate5cac'e5re6ion"prefix) 3alue()ser3ices)/>
%%%
</&ro&erties>
</&ersistence-unit>
</&ersistence>
There are actually four different cache region factory classes. Besides
JndiMultiplexedJBossCacheRegionFactory, there is also
MultiplexedJBossCacheRegionFactory, SharedJBossCacheRegionFactory and
JndiSharedJBossCacheRegionFactory. You should consult the Hiernate docu!entation
aout the differences et"een the three.
J+, Tuning

<&e large memor3 %age &u%%ort 7HugeT+) in +inu28.

Default memor3 %age &i5e i& t3%icall3 CF). !en 3ou are
addre&&ing large amount& of memor3 t!i& 4uic-l3 add& u% to lot&
of memor3 %age&.

$#en 0u&t one gigab3te of memor3, re4uire& 2G2, 1CC memor3 %age&H

+arge memor3 %age &u%%ort u&uall3 &tart& "it! 2M) memor3


%age&, and can be a& large a& 2IGM) on &ome arc!itecture&.

All t!e ma0or J'M,& &u%%ort large memor3 %age& on +inu2, but it&
a little tric-ier to &etu% t!an one "ould t!in-.

)e&ide& t!e &3&tem o#er!ead of ma%%ing &o man3 memor3


%age&, large memor3 %age& on +inu2 cannot be &"a%%ed to di&-.
J+, Tuning (Continued)

<&e large memor3 %age& "it! t!e GC(bit J'M.

<&e t!e GC(bit J'M "!ene#er 3ou !a#e a more t!an CG) of
memor3 a#ailable to 3ou.

+arge %age memor3 i& not a#ailable on t!e *2(bit J'M.

RH$+ doe& let 3ou allocate large %age& on t!e *2(bit />, but 3ou get
an illegal argument "!en &tarting t!e J'M.

T!e >un J'M, a& "ell a& /%enJDF, re4uire& t!e follo"ing
o%tion, %a&&ed on t!e command(line, to u&e large %age&E

(@@EJ<&e+argePage&

>ee in&truction& in A%%endi2 &lide& for detail& on +inu2 &etu%.


J+, Tuning (Continued)

Turn on aggre&&i#e o%timi5ation&.

(@@EJAggre&&i#e/%t&.

T!i& o%tion on t!e >un and /%enJDF 1.G J'M,& turn& on additional Hot>%ot
o%timi5ation& t!at !a#e 3et to be made default.

Reduced re&%on&e time& on m3 te&t "or-load b3 KL.

<&e $&ca%e Anal3&i& on $AP "it! an $J) * "or-load.

(@@EJDo$&ca%eAnal3&i&.

9ot a general o%timi5ation t!at I "ould rel3 on for an3t!ing out&ide of t!e
$AP "it!out te&ting it fir&t.

$&ca%e Anal3&i& determine& if ob0ect& are acce&&ed in multi%le t!read& or a &ingle t!read. If
a &ingle t!read, t!en it Ae&ca%e&B t!e ob0ect ma-ing it local.

T!i& !a& t!e affect of reducing loc-ing in man3 ca&e& 7im%ro#ing multi(core t!roug!%ut8, and
reducing garbage collection o#er!ead.

Reduced re&%on&e time& b3 C0L on m3 te&t "or-loadHHHH


-igh.le/el Data"ase Tuning

it! databa&e& cac!e i& -ingH

Modern databa&e& are e2tremel3 efficient at cac!ing data.

T!e more read inten&i#e 3ou are, t!e more cac!e !el%&.

/f cour&e, if 3ou are "rite !ea#3, or t!e data &et i& &o large 7e.g. data
"are!ou&e8, t!en a large cac!e "on,t !el%, and "ill be &lo"er.

<nder&tand 3our read to "rite ratio&H

Mo&t a%%lication& I !a#e &een o#er t!e %a&t 10 3ear& are read
inten&i#e.

T!i& tend& to be true, due to t!e fact t!at mo&t a%%lication& dri#e t!eir
bu&ine&& logic b3 reading data from t!e databa&e, #er&u& being !ard
coded.

<&e batc! fetc!ing and in&ertingH

.an &ee order of magnitude im%ro#ement&H


Data"ases and ($!

<&e DIR$.T=I/ of 3ou databa&e &u%%ort& itH

it! a large cac!e or a "rite inten&i5e "or-load, 3ou


&!ould be a#oiding double buffering "it! t!e file &3&tem
buffer cac!e all toget!er.

I !a#e &een DIR$.T=I/ reduce .P< utili5ation b3 a& muc! a&


M0L, and im%ro#e t!roug!%ut dramaticall3.

<&e a&3nc!ronou& I1/ if 3our databa&e &u%%ort& it.

A& a &ide note, ma-e &ure 3ou !a#e enoug! t!read& or


%roce&&e& for reading and "riting on 3our databa&e
engine.
Example Application

I !a#e an a%%lication t!at I load te&ted u&ing t!e $AP,& default


configuration, along "it! all +inu2 %arameter& at t!eir default&.

I load te&ted t!i& a%%lication, u&ing Grinder, and mea&ured t!e


mo&t t!roug!%ut t!at I could ac!ie#e "it! all of t!e&e &etting& at
t!e default.

I too- t!e &ame a%%lication and a%%lied t!e follo"ing


o%timi5ation&E

+arge %age memor3 &u%%ort, logging, %re%ared &tatement


cac!ing, and enabling batc! in&ert&. I al&o added t"o J'M
o%timi5ation& (@@EJAggre&&i#e/%t& and
J@@EDo$&ca%eAnal3&i&.

T!i& a%%lication i& an $J) * a%%lication, a &im%le <I, &tateful


and &tatele&& &e&&ion bean&, and MD), and entitie&.
esults0
%.%%%
&%.%%%
'%.%%%
3%.%%%
(%.%%%
)%.%%%
*%.%%%
+%.%%%
,%.%%%
JBoss EAP ) -A Results
Transactions per !econd Mean
.o /ptimi0ations
& Virtual 1ser ) Virtual 1sers &% Virtual 1sers &) Virtual 1sers '% Virtual users ') Virtual users 3% Virtual users 3) Virtual 1sers (% Virtual users () Virtual users
)% Virtual users )) Virtual users *% Virtual users *) Virtual users +% Virtual users +) Virtual users ,% Virtual users ,) Virtual users 2% Virtual users
esults0
%.%
)%.%
&%%.%
&)%.%
'%%.%
')%.%
3%%.%
JBoss EAP ) -A Results
Millisecond Response Times Mean
.o /ptimi0ations
& Virtual 1ser ) Virtual 1sers &% Virtual 1sers &) Virtual 1sers '% Virtual users ') Virtual users 3% Virtual users 3) Virtual 1sers (% Virtual users () Virtual users
)% Virtual users )) Virtual users *% Virtual users *) Virtual users +% Virtual users +) Virtual users ,% Virtual users ,) Virtual users 2% Virtual users
esults0
%.%%%
'%.%%%
(%.%%%
*%.%%%
,%.%%%
&%%.%%%
&'%.%%%
&(%.%%%
JBoss EAP ) -A Results3
Transactions per !econd Mean
/ptimi0ed
2) Virtual users &%% Virtual users &%) Virtual users &&% Virtual users &&) Virtual users &'% Virtual users &') Virtual users &3% Virtual users
&3) Virtual users &(% Virtual users &() Virtual users &)% Virtual users &)) Virtual users &*% Virtual users &*) Virtual users &+% Virtual users
esults0
%.%
)%.%
&%%.%
&)%.%
'%%.%
')%.%
3%%.%
JBoss EAP ) -A Results3
Millisecond Response Times Mean
/ptimi0ed
2) Virtual users &%% Virtual users &%) Virtual users &&% Virtual users &&) Virtual users &'% Virtual users &') Virtual users &3% Virtual users
&3) Virtual users &(% Virtual users &() Virtual users &)% Virtual users &)) Virtual users &*% Virtual users &*) Virtual users &+% Virtual users

Appendix1 %arge Page ,emor2 Setup (%inux)

T!e >un J'M, a& "ell a& /%enJDF, re4uire& t!e follo"ing
o%tion, %a&&ed on t!e command(line, to u&e large %age&E

-CC:J;seLar(e,a(es

T!e >un in&truction& lea#e it at t!at and 3ou "ill mo&t li-el3 get t!e follo"ing
errorE

Kailed to reser$e shared memory Eerror-no.57H%

9e2t, 3ou &et t!e follo"ing in /etc/sysctl%con9

8ernel%shmmax . n

!ere n i& e4ual to t!e number of b3te& of t!e ma2imum &!ared memor3
&egment allo"ed on t!e &3&tem. 6ou &!ould &et it at lea&t to t!e &i5e of t!e
large&t !ea% &i5e 3ou "ant to u&e for t!e J'M, or alternati#el3 3ou can &et it to
t!e total amount of memor3 in t!e &3&tem.

$m%nrIhu(e&a(es . n

!ere n i& e4ual to t!e number of large %age&. 6ou "ill need to loo- u% t!e large
%age &i5e in /&roc/memin9o.

$m%hu(eItlbIshmI(rou& . gid

!ere gid i& a &!ared grou% id for t!e u&er& 3ou "ant to !a#e acce&& to t!e large
%age&.
Appendix1 %arge Page ,emor2 Setup (%inux)

9e2t, &et t!e follo"ingE

In /etc/security/limits%con9

<username> so9t memloc8 n

<username> hard memloc8 n

!ere <username> i& t!e runtime u&er of t!e J'M.

!ere n i& t!e number of %age& from $m%nrIhu(e&a(es N t!e %age &i5e in F)
from /&roc/memin9o.

6ou can no" enter t!e command sysctl -&, and e#er3t!ing "ill
be &et and &ur#i#e a reboot.

6ou can tell t!at t!e large %age& are allocated b3 loo-ing at
/&roc/memin9o, and &eeing a non(5ero #alue for *u(e,a(esI+otal.

T!i& ma3 fail "it!out a reboot, becau&e "!en t!e /> allocate& t!e&e %age&, it
mu&t find contiguou& memor3 for t!em.

&A'(')E "!en 3ou allocate large %age memor3, it i& not


a#ailable to a%%lication& in general and 3ou &3&tem "ill loo- and
act li-e it !a& t!at amount of memor3 remo#ed from itH
Appendix1 %arge Page ,emor2 Setup (%inux)

$2am%le configuration from a &er#er "it! KG) of memor3


and GG) of memor3 configured a& large %age memor3.

Page &i5e i& 2M) 720CK F)8, a& &!o"n in /&roc/memin9o

*u(e&a(essi4e: 7":0LB

/etc/sysctl%con9

8ernel%shmmax . 0M066!:M67

$m%hu(etlbIshmI(rou& . M"5

$m%nrIhu(e&a(es . !"N7

.alculation& are a& follo"&E

102CN102CN102CNK O KIKPP*CIP2

7102CN102CN102CNG817102CN102CN28 or GG)12M) O *0M2 %age&


Appendix1 %arge Page ,emor2 Setup (%inux)

/etc/security/limits%con9

jboss so9t memloc8 #765:M#

jboss hard memloc8 #765:M#

.alculation i& a& follo"&E

*0M2 large %age& N 20CK F) %age &i5e Q *0M2N20CK O


G2P1CIG

T!e 0bo&& u&er i& al&o added to t!e I01 grou% in


/etc/(rou&, "!ic! i& called hu(etlb 73ou can call
t!i& an3t!ing 3ou "ant8. T!i& gi#e& t!o&e u&er&
%ermi&&ion to attac! to t!e &!ared memor3 &egment.
Appendix1 %arge Page ,emor2 Setup (%inux)

KinallyF a9ter startin( the )<,F you should see somethin(


li8e this:

*u(e,a(esI?s$d: 5507

If 3ou don,t &ee a non(5ero #alue in /&roc/memin9o


for *u(e,a(esI?s$d, t!an 3ou are not u&ing large
%age&.

)e&ide& t!e log for $AP, 3ou &!ould c!ec-


/$ar/lo(/messa(es for an a$c denied me&&age&.

I !a#e run into >$ +inu2 %olicie& t!at don,t allo" a%%lication&
li-e t!e J'M to acce&& t!e &!ared memor3 &egment.

Good luc-H

You might also like