mardi 7 décembre 2010

unix / linux : éditer la ligne d'une commande en mode console

il suffit d’utiliser les mêmes commandes que sous VI :

find . -name '*.sh' -exec grep -v 'test'

Si je souhaite revenir, et éditer la ligne il suffit de faire :

Escape+H : pour aller à guache
Escape+L : pour aller à droite
Escape+x : pour supprimer
etc ..

oracle : retrouver facilement une colonne d'un type"donné" ou d'un nom donné

Voici une requête simple permettant de retrouver des colonnes d'un type données, exemple, la recherche de toutes les tables contenant des CLOB


select * from user_tab_columns where data_type like '%CLOB%'




select * from user_tab_columns where column_name like '%ILR%'

jeudi 2 décembre 2010

oracle : in avec plusieurs champs

Il peut -être utile de faire des requêtes avec des in et avec plusieurs champs :

Voici un exemple de requêtes qui prend dans le IN les champs id_composant et id_versi_composant.

Attention à ne pas oublier les parenthèses :


select * from TBOT_VERSTARIF_VERSCOMP where (id_composant,id_versi_composant) in
(select id_composant,id_versi_composant from TBOTVERS_COMPOSANT where id_composant in (select id_composant from TBOTCOMPOSANT where type_composant in ('2')) and dh_prod >= TO_DATE('01/01/2009','DD/MM/YYYY'))

java : jvm utiliser JConsole ou Java Visual Viewer

Pour des JVM 1.5 ou plus, il est possible de monitorer la JVM :
- CPU
- thread dump
- mémoire (heap, permGen, etc plus eden, etc ...)

Pour cela il faut configurer le JMX :

Voici, un exemple simple :

-Dcom.sun.management.jmxremote.port=7001 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

Ensuite configurer la Java VM :

- Ajouter la configuration et faire un remote debug

java : JVM et log du "garbage collector"

Voici, pour rappel les options à utiliser pour logger l'activité du "garbage collector"

-Xloggc:/var/run/log/java.loggc-monAppli-app.txt.20101130.142937 -XX:+PrintGCTimeStamps -XX:+PrintGCDetails


A noter qu'il existe une appli super pour les visulaiser (GCViewer)

GCViewer

Le télécharger à

java : rappel sur les options PermGen et Heap

Il peut parfois arriver d'avoir des erreurs de type OutOfMemory : Perm Gen Space ...

Le Head contient les instances en cours, et est "Garbage Collectée". En cas d'OutOfMemory, la taille peut-être simplement modifié via les optionq de JVM suivantes :

-Xms512m
-Xmx1400m


Un moyen simple pour régler ce problème est d'utilser des options non standard (<=> -X: ou -XX: mais présente sur les JVM Sun) et d'augmenter les tailles du permGen:


-XX:PermSize=128M
-XX:MaxPermSize=256M


Qu'est ce que cela signifie ?

Si je regarde la consommation de mon programme ... je m'aperçoit que le HEAP ne consomme que 5% de la mémoire !!! or j'ai un OutOfMemory.

Ce qu'il faut comprendre c'est que le PermGen est la zone mémoire ou sont stockés les classes chargées, les méthodes, les Strings, les annotations, et les membres static !!! Et surtout, contrairement au Heap, elle ne sont pas "Garbage Collecté". Du coup, cette mémoire ne peut qu'augmenter !!:

Du coup, si un membre "static" est un singleton , qui a un rôle de cache par exemple, ce dernier peut-être très gourmand et conduire à ce genre d'erreur. De plus, lors de la compilation de JSP, ces dernières sont compilées et transformées en servlet, et donc chargée dans le "PermGen".

De plus, il est à noter qu'à chaque modification d'une méthode ou d'une classe, cette dernière est de nouveau chargée en "PermGen".

Ceci peut donc être catastrophique,lorsque l'on utilise des librairies qui modifient les classes comme par exemple :
- les librairies d'instrumentation de code
- ou qui de programmation par aspect ... (Spring, bcel, cglib, asm, etc...)

Lors de ce genre de problème, il faut tout de même se poser la question, de savoir si cette augmentation de la taille de la mémoire est justifiée (ex: singleton de chargement d'un référentiel) , ou si elle provient d'un problème plus profond de conception.

java : rappel sur les paramètres de la JVM

tout est sur le site d'oracle

Ou cet autre très bon lien :
ou sur le blog de SUN

Rappel des options


Behavioral Options

Option and Default Value Description
-XX:-AllowUserSignalHandlers Do not complain if the application installs signal handlers. (Relevant to Solaris and Linux only.)
-XX:AltStackSize=16384 Alternate signal stack size (in Kbytes). (Relevant to Solaris only, removed from 5.0.)
-XX:-DisableExplicitGC Disable calls to System.gc(), JVM still performs garbage collection when necessary.
-XX:+FailOverToOldVerifier Fail over to old verifier when the new type checker fails. (Introduced in 6.)
-XX:+HandlePromotionFailure The youngest generation collection does not require a guarantee of full promotion of all live objects. (Introduced in 1.4.2 update 11) [5.0 and earlier: false.]
-XX:+MaxFDLimit Bump the number of file descriptors to max. (Relevant to Solaris only.)
-XX:PreBlockSpin=10 Spin count variable for use with -XX:+UseSpinning. Controls the maximum spin iterations allowed before entering operating system thread synchronization code. (Introduced in 1.4.2.)
-XX:-RelaxAccessControlCheck Relax the access control checks in the verifier. (Introduced in 6.)
-XX:+ScavengeBeforeFullGC Do young generation GC prior to a full GC. (Introduced in 1.4.1.)
-XX:+UseAltSigs Use alternate signals instead of SIGUSR1 and SIGUSR2 for VM internal signals. (Introduced in 1.3.1 update 9, 1.4.1. Relevant to Solaris only.)
-XX:+UseBoundThreads Bind user level threads to kernel threads. (Relevant to Solaris only.)
-XX:-UseConcMarkSweepGC Use concurrent mark-sweep collection for the old generation. (Introduced in 1.4.1)
-XX:+UseGCOverheadLimit Use a policy that limits the proportion of the VM's time that is spent in GC before an OutOfMemory error is thrown. (Introduced in 6.)
-XX:+UseLWPSynchronization Use LWP-based instead of thread based synchronization. (Introduced in 1.4.0. Relevant to Solaris only.)
-XX:-UseParallelGC Use parallel garbage collection for scavenges. (Introduced in 1.4.1)
-XX:-UseParallelOldGC Use parallel garbage collection for the full collections. Enabling this option automatically sets -XX:+UseParallelGC. (Introduced in 5.0 update 6.)
-XX:-UseSerialGC Use serial garbage collection. (Introduced in 5.0.)
-XX:-UseSpinning Enable naive spinning on Java monitor before entering operating system thread synchronizaton code. (Relevant to 1.4.2 and 5.0 only.) [1.4.2, multi-processor Windows platforms: true]
-XX:+UseTLAB Use thread-local object allocation (Introduced in 1.4.0, known as UseTLE prior to that.) [1.4.2 and earlier, x86 or with -client: false]
-XX:+UseSplitVerifier Use the new type checker with StackMapTable attributes. (Introduced in 5.0.)[5.0: false]
-XX:+UseThreadPriorities Use native thread priorities.
-XX:+UseVMInterruptibleIO Thread interrupt before or with EINTR for I/O operations results in OS_INTRPT. (Introduced in 6. Relevant to Solaris only.)
Back to Options

Performance Options

Option and Default Value Description
-XX:+AggressiveOpts Turn on point performance compiler optimizations that are expected to be default in upcoming releases. (Introduced in 5.0 update 6.)
-XX:CompileThreshold=10000 Number of method invocations/branches before compiling [-client: 1,500]
-XX:LargePageSizeInBytes=4m Sets the large page size used for the Java heap. (Introduced in 1.4.0 update 1.) [amd64: 2m.]
-XX:MaxHeapFreeRatio=70 Maximum percentage of heap free after GC to avoid shrinking.
-XX:MaxNewSize=size Maximum size of new generation (in bytes). Since 1.4, MaxNewSize is computed as a function of NewRatio. [1.3.1 Sparc: 32m; 1.3.1 x86: 2.5m.]
-XX:MaxPermSize=64m Size of the Permanent Generation. [5.0 and newer: 64 bit VMs are scaled 30% larger; 1.4 amd64: 96m; 1.3.1 -client: 32m.]
-XX:MinHeapFreeRatio=40 Minimum percentage of heap free after GC to avoid expansion.
-XX:NewRatio=2 Ratio of new/old generation sizes. [Sparc -client: 8; x86 -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12]
-XX:NewSize=2.125m Default size of new generation (in bytes) [5.0 and newer: 64 bit VMs are scaled 30% larger; x86: 1m; x86, 5.0 and older: 640k]
-XX:ReservedCodeCacheSize=32m Reserved code cache size (in bytes) - maximum code cache size. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier, Solaris 64-bit and and64: 1024m.]
-XX:SurvivorRatio=8 Ratio of eden/survivor space size [Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32]
-XX:TargetSurvivorRatio=50 Desired percentage of survivor space used after scavenge.
-XX:ThreadStackSize=512 Thread Stack Size (in Kbytes). (0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]
-XX:+UseBiasedLocking Enable biased locking. For more details, see this tuning example. (Introduced in 5.0 update 6.) [5.0: false]
-XX:+UseFastAccessorMethods Use optimized versions of GetField.
-XX:-UseISM Use Intimate Shared Memory. [Not accepted for non-Solaris platforms.] For details, see Intimate Shared Memory.
-XX:+UseLargePages Use large page memory. (Introduced in 5.0 update 5.) For details, see Java Support for Large Memory Pages.
-XX:+UseMPSS Use Multiple Page Size Support w/4mb pages for the heap. Do not use with ISM as this replaces the need for ISM. (Introduced in 1.4.0 update 1, Relevant to Solaris 9 and newer.) [1.4.1 and earlier: false]
-XX:+UseStringCache Enables caching of commonly allocated strings.

-XX:AllocatePrefetchLines=1 Number of cache lines to load after the last object allocation using prefetch instructions generated in JIT compiled code. Default values are 1 if the last allocated object was an instance and 3 if it was an array.

-XX:AllocatePrefetchStyle=1 Generated code style for prefetch instructions.
0 - no prefetch instructions are generate*d*,
1 - execute prefetch instructions after each allocation,
2 - use TLAB allocation watermark pointer to gate when prefetch instructions are executed.

-XX:-XX:+UseCompressedStrings Use a byte[] for Strings which can be represented as pure ASCII. (Introduced in Java 6 Update 21 Performance Release)

-XX:+OptimizeStringConcat Optimize String concatenation operations where possible. (Introduced in Java 6 Update 20)


Back to Options

Debugging Options

Option and Default Value Description
-XX:-CITime Prints time spent in JIT Compiler. (Introduced in 1.4.0.)
-XX:ErrorFile=./hs_err_pid.log If an error occurs, save the error data to this file. (Introduced in 6.)
-XX:-ExtendedDTraceProbes Enable performance-impacting dtrace probes. (Introduced in 6. Relevant to Solaris only.)
-XX:HeapDumpPath=./java_pid.hprof Path to directory or filename for heap dump. Manageable. (Introduced in 1.4.2 update 12, 5.0 update 7.)
-XX:-HeapDumpOnOutOfMemoryError Dump heap to file when java.lang.OutOfMemoryError is thrown. Manageable. (Introduced in 1.4.2 update 12, 5.0 update 7.)
-XX:OnError=";" Run user-defined commands on fatal error. (Introduced in 1.4.2 update 9.)
-XX:OnOutOfMemoryError=";
" Run user-defined commands when an OutOfMemoryError is first thrown. (Introduced in 1.4.2 update 12, 6)
-XX:-PrintClassHistogram Print a histogram of class instances on Ctrl-Break. Manageable. (Introduced in 1.4.2.) The jmap -histo command provides equivalent functionality.
-XX:-PrintConcurrentLocks Print java.util.concurrent locks in Ctrl-Break thread dump. Manageable. (Introduced in 6.) The jstack -l command provides equivalent functionality.
-XX:-PrintCommandLineFlags Print flags that appeared on the command line. (Introduced in 5.0.)
-XX:-PrintCompilation Print message when a method is compiled.
-XX:-PrintGC Print messages at garbage collection. Manageable.
-XX:-PrintGCDetails Print more details at garbage collection. Manageable. (Introduced in 1.4.0.)
-XX:-PrintGCTimeStamps Print timestamps at garbage collection. Manageable (Introduced in 1.4.0.)
-XX:-PrintTenuringDistribution Print tenuring age information.
-XX:-TraceClassLoading Trace loading of classes.
-XX:-TraceClassLoadingPreorder Trace all classes loaded in order referenced (not loaded). (Introduced in 1.4.2.)
-XX:-TraceClassResolution Trace constant pool resolutions. (Introduced in 1.4.2.)
-XX:-TraceClassUnloading Trace unloading of classes.
-XX:-TraceLoaderConstraints Trace recording of loader constraints. (Introduced in 6.)
-XX:+PerfSaveDataToFile Saves jvmstat binary data on exit.

mercredi 1 décembre 2010

unix / linux : compter le nombre de lignes

Une très bonne astuce, pour compter le nombre de lignes d'un programme. Par exemple, le nombre de ligne de java :

find . -name '*.java'-exec cat '{}' \; | wc -l

unix / linux : trouver informations sur la machine hardware

Une commande utile pour trouver des informations sur le hardware d'une machine:

Sur Unix Sun Solaris :
psrinfo -v

Sur Linux :

Pour la mémoire :
cat cat /proc/meminfo

Pour les infos CPU :
cat /proc/cpuinfo

ou une autre commande fort utile "dmesg". Cependant cette dernière envoie beaucoup d'informations et un grep est souvent nécessaire :
dmesg | grep cpu